Rails ActiveModel :: ForbiddenAttributesError Devise,Omniauth

时间:2015-02-07 20:07:11

标签: ruby-on-rails ruby devise omniauth strong-parameters

我遇到了Omniauth身份验证和Rails 4的问题,我得到了一个Rails ActiveModel :: ForbiddenAttributesError。

我正在使用gem 'protected_attributes',因此强大的参数应该不是问题。

我的用户模型包含以下内容:

  def self.from_omniauth(auth)
    where(auth.slice(:provider, :uid)).first_or_create do |user|
      user.username = auth.info.email
      user.email = auth.info.email
      user.password = Devise.friendly_token[0,20]
      user.name = auth.info.name
    end
  end

user.password只是为了保持与现有Devise auth系统的兼容性。

AR错误表示此行:where(auth.slice(:provider, :uid)).first_or_create do |user|正在抛出错误。

上述方法来自:

class OmniauthCallbacksController < Devise::OmniauthCallbacksController
  def mavenlink
    @user = User.from_omniauth(request.env['omniauth.auth'])
    service = @user.services.initialize_or_update_via_omniauth(request.env['omniauth.auth'])
    if service && service.save
      sign_in_and_redirect @user #this will throw if @user is not activated
      set_flash_message(:notice, :success, :kind => "Mavenlink") if is_navigational_format?
    else
      redirect_to root_path, error: "Error signing in with Mavenlink credentials."
    end
  end
end

这是否相关,我不确定,但我也一直在运行此错误:

找不到路径“/ auth / mavenlink / callback”的有效映射

也许没有关系,但我想我会把它包括在内以防万一。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:13)

几个星期前我遇到了同样的问题,并通过更改下面的一行来修复它。基本上你应该明确地将参数传递给你的查询。

where(provider: auth.provider, uid: auth.uid).first_or_create do |user|

您可以找到关于此的Devise issue