Rails ActiveModel::ForbiddenAttributesError 设计,Omniauth
Rails ActiveModel::ForbiddenAttributesError Devise, Omniauth
我 运行 遇到了 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 身份验证系统的兼容性。
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”的有效映射
可能不相关,但我想我会把它包括在内以防万一。
如有任何帮助,我们将不胜感激!
几周前我遇到了同样的问题并通过更改下面的行修复了它。本质上,您应该明确地将参数传递到您的查询中。
where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
你可以找到关于这个的Devise issue。
我 运行 遇到了 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 身份验证系统的兼容性。
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”的有效映射
可能不相关,但我想我会把它包括在内以防万一。
如有任何帮助,我们将不胜感激!
几周前我遇到了同样的问题并通过更改下面的行修复了它。本质上,您应该明确地将参数传递到您的查询中。
where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
你可以找到关于这个的Devise issue。