1

Rails3.2 devise_invitable (1.1.8)、devise (3.1.1) に強力なパラメーターを使用していません。ユーザーを登録しようとすると、次のログが表示されます。このルートを使用して、devise 招待コントローラーをカスタマイズしています。

devise_for :users, path_names: {sign_in: "login", sign_out: "logout"}, :controllers => { :invitations => 'team_invitations' }

しかし、登録リクエストがデバイス登録コントローラーではなく DeviseInvitable::RegistrationsController に送信される理由

Started POST "/users" for 127.0.0.1 at 2013-10-02 21:27:50 +1300
Processing by DeviseInvitable::RegistrationsController#create as HTML
Parameters: {"utf8"=>"✓","authenticity_token"=>"thlkjyVYHhFY3erB+9yI7uwotIU7GozswOdjz9w7DNA=", 
"user"=>{"username"=>"", "email"=>"boopage@gmail.com", "password"=>"[FILTERED]"}, "commit"=>"Sign up"}
Unpermitted parameters: username, email, password

ありがとう

4

4 に答える 4

1

アプリケーション コントローラーで強力なパラメーターを編集する必要があります。これはhttps://github.com/scambra/devise_invitable#strong-parameters

devise_parameter_sanitizer.for(:invite) do |u|
   u.permit(username, :email, :password, :password_confirmation,
         :invitation_token)
end
于 2014-05-26T15:17:41.123 に答える
0

同じ問題があります。上記の解決策は私にとってはうまくいきません。そこで、devise モジュールに少しモンキー パッチを適用しました (ソースhttps://github.com/scambra/devise_invitable/blob/a50e37bc43509f7be02be8bca2b072b55e66eeaf/lib/devise_invitable/parameter_sanitizer.rb ):

モジュール DeviseInvitable
  モジュール ParameterSanitizer
    CUSTOM_FIELDS = [:field1, :field2]

    プライベート

    定義されている場合?(Devise::BaseSanitizer)
      def permit(キー)
        default_params.permit(*配列(キー))
      終わり

      def attributes_for_with_invitable(種類)
        ケース類
        いつ :招待する
          resource_class.respond_to?(:invite_key_fields) ? resource_class.invite_key_fields.concat(CUSTOM_FIELDS) : []
        いつ :accept_invitation
          [:password, :password_confirmation, :invitation_token]
        else attributes_for_without_invitable(種類)
        終わり
      終わり
    そうしないと
      def initialize_with_invitable(resource_class, resource_name, params)
        initialize_without_invitable(resource_class, resource_name, params)
        permit(:invite, keys: (resource_class.respond_to?(:invite_key_fields) ? resource_class.invite_key_fields.concat(CUSTOM_FIELDS) : []) )
        permit(:accept_invitation, キー: [:password, :password_confirmation, :invitation_token] )
      終わり
    終わり
  終わり
終わり

イニシャライザに配置するだけです。

于 2016-01-22T13:09:34.423 に答える
0

controllers/application_controller.rb に次を追加します。

before_filter :configure_permitted_parameters, if: :devise_controller?

protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_in) << :username
    devise_parameter_sanitizer.for(:sign_in) << :email
    devise_parameter_sanitizer.for(:sign_in) << :password
  end
于 2014-02-07T00:04:04.850 に答える