嵌套omniauth的强参数
问题描述:
我有一个使用Devise 3.5.10的Rails 4.0.13应用程序。我User
模型是:omniauthable
使用嵌套authentications
has_many
关系,这样用户就可以通过几个供应商Omniauth:嵌套omniauth的强参数
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable, :confirmable,
:recoverable, :rememberable, :trackable,
:omniauthable, :omniauth_providers => Authentication.auth_methods
has_many :authentications, dependent: :destroy
accepts_nested_attributes_for :authentications
end
(本来我实现了这个前段时间on Rails的3.2,所以我不记得确切的我不得不为此做出改变,我不相信这是相关的,但如果有必要,可以尝试查看它)。
这意味着,用户使用Omniauth有一些参数,如邮件:
Parameters: {"utf8"=>"✓", "user"=>{
"authentications_attributes"=>
{"0"=>{"provider"=>"open_id",
"uid"=>"http://pretend.openid.example.com?id=12345",
"nickname"=>"http://pretend.openid.example.com"}},
"name"=>"Person1",
"email"=>"[email protected]", "password"=>"[FILTERED]",
"password_confirmation"=>"[FILTERED]"}, "commit"=>"Sign up"}
我无法弄清楚如何获得强大的参数允许此。我目前的尝试是params.require(:user).permit(:name, :email, :password, :password_confirmation, authentications_attributes: {"0" => [:provider, :uid, :nickname]})
,但仍产生日志Unpermitted parameters: provider, uid, nickname
。
我该如何允许这些参数?
答
指定嵌套参数时,XYZ_attributes
部分接受一个数组,而不是一个散列。
在你的情况下,尝试
authentications_attributes: [:provider, :uid, :nickname]
在
params.require(:user).permit(:name, :email, :password, :password_confirmation, authentications_attributes: [:provider, :uid, :nickname])
来源:https://github.com/rails/strong_parameters#nested-parameters
D'哦!我非常关注“0”,我没有想到这将不得不与'has_many'进行交互。谢谢,那很完美。 – Chowlett