答えて

52

工夫4.xの更新

class ApplicationController < ActionController::Base 
    before_filter :configure_permitted_parameters, if: :devise_controller? 

    protected 

    def configure_permitted_parameters 
    devise_parameter_sanitizer.permit(:sign_up, keys: [:username]) 
    devise_parameter_sanitizer.permit(:sign_in, keys: [:username]) 
    devise_parameter_sanitizer.permit(:account_update, keys: [:username]) 
    end 
end 

、工夫は通常通り動作します。

アップデート:devise#strong-parametersで説明されているように、Devise 3.xの最新バージョンでは、認証キー(通常は電子メールフィールド)とパスワードフィールドはすでに許可されています。ただし、サインアップフォームに追加のフィールドがある場合は、許可する追加フ​​ィールドをDeviseに知らせる必要があります。これを行う最も簡単な方法は、フィルタを使用することです:工夫2.Xについて

class ApplicationController < ActionController::Base 
    before_filter :configure_permitted_parameters, if: :devise_controller? 

    protected 

    def configure_permitted_parameters 
    devise_parameter_sanitizer.for(:sign_up) << :username 
    end 
end 

、あなたがユーザーモデルで明示的にホワイトリスト汚染されたパラメータを必要とする安全機能を使用する場合:

include ActiveModel::ForbiddenAttributesProtection 

必要な変更を一部のコントローラーを無効にするhttps://gist.github.com/3350730にあります。

+0

Deviseの公開API – msa7

+1

を中継しているので、私の意見では次の回答が良いと思います。回答は1年以上前のものだったからです。私は新しい開発に基づいて答えを更新しました。 – ronalchn

+0

この質問は、世界がどれほど小さいかの完全な例です。あなたは私の質問に自分の要点で答えました= D –

8

簡単な方法は、単純なBeforeフィルタをApplicationControllerに追加することです。あなたは別の役割および/または他のより複雑なシナリオを持っている場合があり、下のリンク上の他のオプションは次のとおりです。

https://github.com/plataformatec/devise#strong-parameters

1
before_filter :configure_sanitized_params, if: :devise_controller? 

def configure_sanitized_params 
    devise_parameter_sanitizer.for(:sign_up) {|u| u.permit(:firstname, :designation_id ,:middlename, :previous_experiance_year,:previous_experiance_month,:lastname, :email, :username, :password, :password_confirmation, :previous_experiance,:empid, :dob, :timezone, :doj, :gender, :education, :comments, :locked, :deactivated, :reason, :phone,:deactivated_date,:image)} 
    devise_parameter_sanitizer.for(:account_update) {|u| u.permit(:remove_image,:firstname, :designation_id ,:middlename, :lastname, :email, :username, :empid, :dob, :timezone, :doj, :gender, :education, :comments, :locked, :deactivated, :reason, :phone, :deactivated_date,:image)} 

end 

コピーしても代わりに、アプリケーションのコントローラにこのコードを貼り付けます。FIRSTNAME、および他のフィールドは、フィールドを追加する必要があります。

+0

これは新しい方法です。開発者がコードに強力なパラメータを実装していない日に質問が返されました。 –

関連する問題