Почему ActiveModel::ForbiddenAttributesError ошибка?
Вот моя модель
class User < ActiveRecord::Base
def self.from_omniauth(auth)
where(auth.slice(:provider, :uid)).first_or_initialize.tap do |user|
user.provider = auth.provider
user.uid = auth.uid
user.name = auth.info.name
user.oauth_token = auth.credentials.token
user.oauth_expires_at = Time.at(auth.credentials.expires_at)
user.save!
end
end
end
Вот мой контроллер
class SessionsController < ApplicationController
def create
user = User.from_omniauth(env["omniauth.auth"])
session[:user_id] = user.id
redirect_to root_url
end
def destroy
session[:user_id] = nil
redirect_to root_url
end
end
Я попытался заглянуть в базу данных, если была сделана повторяющаяся запись. Но нет. Пожалуйста, дайте мне знать, если вы можете помочь.
1 ответ
Просто измените where(условие) на:
where(provider: auth.provider, uid: auth.uid)
Первый подход не работает из-за метода #permitted? какой AR вызывает (если он определен) для очистки атрибутов.
> h = auth.slice(:provider, :uid)
> h.class
=> OmniAuth::AuthHash < Hashie::Mash
> h.permmitted?
> false
Тем не менее, простой хэш не будет иметь #permitted? определяется, таким образом, он будет просто продолжаться:
> h = { provider: auth.provider, uid: auth.uid }
> h2.permitted?
NoMethodError: undefined method `permitted?' for {:provider=>"facebook", :uid=>"XXXX"}:Hash