rails上的ForbiddenAttributesError ruby

时间:2016-02-09 19:32:56

标签: ruby-on-rails ruby rails-activerecord omniauth

我在Ruby中有这个模型,但它会抛出ActiveModel::ForbiddenAttributesError

class User < ActiveRecord::Base
def self.from_omniauth(auth)
    where(auth.slice("uid", "nickname", "image")).first ||  create_from_omniauth(auth)
end

def self.create_from_omniauth(auth)
    create! do |user|
        user.uid = auth["uid"]
        user.name = auth["info"]["nickname"]
        user.image = auth["info"]["image"]
    end
  end
end

当我执行此操作时

def auth_callback
  user = User.from_omniauth(env["omniauth.auth"])
session[:user_id] = user.id
redirect_to root_url, notice: "signed in!"

end
end

on ruby​​ 2.2.1p85(2015-02-26修订版49769)[x86_64-linux]

你能告诉我如何摆脱这个错误吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

我认为slice方法不再可用于绕过强参数。 尝试使用此代码,该代码尝试更具体的auth选项:

def self.from_omniauth(auth)
  where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
    user.provider = auth.provider 
    user.uid      = auth.uid
    user.name     = auth.info.name
    user.save
  end
end

您可能需要使用auth[:provider]代替auth.provider。 如果这对您有用,请在评论中告诉我。 您还可以浏览帮助我的this question