У меня есть приложение Rails 4.0.13 с помощью Devise 3.5.10. Моя 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
(я первоначально реализованного это некоторое время назад на 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
.
Как я могу разрешить эти параметры?
D'Oh! Я был так привязан к «0», что я не думал о том, как это должно было бы взаимодействовать с 'has_many'. Спасибо, это прекрасно. – Chowlett