2016-06-10 18 views
0

Ich habe eine Rails 4.0.13 App mit Devise 3.5.10. Mein User Modell ist :omniauthable mit einer verschachteltenauthenticationshas_many Beziehung, so dass der Benutzer durch mehrere Anbieter Omniauth:Starke Parameter für verschachtelte 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 

(ich dies vor einiger Zeit ursprünglich implementiert on Rails 3.2, so dass ich nicht daran erinnern, die genauen Änderungen, die ich machen musste, um das funktionieren zu lassen. Ich glaube nicht, dass es relevant ist, aber ich kann versuchen, es zu sehen, wenn es nötig ist.)

Dies bedeutet, dass ein Benutzer melden Sie sich mit Omniauth hat Parameter wie:

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"} 

ich kann nicht herausfinden, wie stark Parameter zu erhalten, dies zu ermöglichen. Mein aktueller Versuch ist params.require(:user).permit(:name, :email, :password, :password_confirmation, authentications_attributes: {"0" => [:provider, :uid, :nickname]}), aber das erzeugt immer noch ein Protokoll Unpermitted parameters: provider, uid, nickname.

Wie kann ich diese Parameter zulassen?

Antwort

1

Beim Angeben verschachtelter Parameter nimmt der Teil XYZ_attributes ein Array und keinen Hashwert an.

In Ihrem Fall versuchen

authentications_attributes: [:provider, :uid, :nickname]

in

params.require(:user).permit(:name, :email, :password, :password_confirmation, authentications_attributes: [:provider, :uid, :nickname]) 

Quelle: https://github.com/rails/strong_parameters#nested-parameters

+0

D'oh! Ich war so auf die "0" fixiert, dass ich nicht darüber nachdachte, wie das mit "has_many" zu tun haben würde. Danke, das ist perfekt. – Chowlett