#はじめに
deviseの「新規登録」「ログイン」「情報更新」機能をカスタマイズする際に必要なストロングパラメーターのsanitizerメソッド
と長いタイトルになってしまいましたが、要は「deviseのユーザー管理機能」についてです。
deviseを使うとユーザー管理機能が簡単に作れますが、デフォルトの機能を変更するには様々な設定が必要です。
今回は「新規登録」「ログイン」「情報更新」をカスタマイズする際に必要な処理について紹介します。
####目次
1.結論
2.devise_parameter_sanitizerメソッドについて
3.sanitizerメソッドの構文
4.処理毎の記述
5.記述するファイル
6.まとめ
#対象の方
deviseを使った事がある
deviseのデフォルト以外の実装がしたい
ストロングパラメーターを理解してる
#開発環境
ruby 2.6.5
rails 6.0.0
devise 4.7.3
#1.結論
まず結論は以下のような記述になります。
class ApplicationController < ActionController::Base
#もしdeviseのコントローラーの事なら全てのアクションの前にメソッドを読み込む
before_action :configure_permitted_parameters, if: :devise_controller? #ログイン機能について
before_action :configure_account_update_parameters, if: :devise_controller? #編集機能について
private
#ログイン機能について
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:nickname, :family_name_kanji, :first_name_kanji, :birthday])
end
#編集機能について
def configure_account_update_parameters
devise_parameter_sanitizer.permit(:account_update, keys: [:nickname, :family_name_kanji, :first_name_kanji, :birthday])
end
end
※注意:「新規登録」と「情報更新」しか実装していないので、その2つについて記述します。
2.devise_parameter_sanitizerメソッドについて
まずメソッドの説明をします。
#####2.1 使用するタイミング
「新規登録」「ログイン」「情報更新」をデフォルト以外にカスタマイズしたい時です。
#####2.2 sanitizerメソッド
sanitizerメソッドとはdeviseのUserモデルに関わるパラメーターを取得するメソッドです。
deviceの内部にデフォルトでパラメーターを取得する記述がされてますが、これに消毒剤=(sanitizer)をかけてカスタマイズできる状態にすることです。
※注意:個人的な解釈の仕方です。
次に、sanitizerメソッドとpermitメソッドを組み合わせます。
そうする事で、deviseにデフォルトで定義されているストロングパラメーターに対して、自分で新しく追加したカラムも含めることができます。
#####2.2 二種類あるpermitメソッドの違い
permitメソッドが二種類あるので、脱線しますが少し説明します。
「sanitizer」のpermitはdeviseのパラメーターを取得するためのメソッドです。
「Rails」のコントローラーで保存時などに使用してるparamsのpermitメソッドとは異なります。
下記がそれぞれの例です。
#例) paramsのpermitメソッド
params.require(:モデル名).permit(:許可したいキー)
#例) devise_parameter_sanitizerのpermitメソッド
devise_parameter_sanitizer.permit(:deviseの処理名, keys: [:許可したいキー(カラム名)]
#3. sanitizerメソッドの構文
メソッド名はconfigure_permitted_parametersと慣習的に定義されてますが、自由に命名しても差し支えありません。
private
def configure_permitted_parameters # メソッド名は自由に命名しても差し支えありません。
# deviseのUserモデルにパラメーターを許可
devise_parameter_sanitizer.permit(:deviseの処理名, keys: [:許可したいキー(カラム名)])
end
※注意:プライベートメソッドの中で定義します。
以上devise_parameter_sanitizerメソッドの説明でした。
4.処理毎の記述
「2.1 使用するタイミング」 でも触れましたが処理する目的で「:devise処理名」の記述が変わります。
処理する目的は「新規登録」「ログイン」「情報更新」です。
処理名 | 目的 |
---|---|
:sign_in | ログイン(サインイン)の処理を行うとき |
:sign_up | 新規登録(サインアップ)の処理を行うとき |
:account_update | アカウント情報更新の処理を行うとき |
#5.記述するファイル
「どこに記述するか」ですが、これは「すべてのコントローラーが継承しているファイル」です。
つまり、application_controller.rbファイルです。
このコントローラーが読み込まれた後、他すべてのコントローラーが読み込まれます。
また、全てのアクションの処理前に処理したいのでbefore_actionを使います。
class ApplicationController < ActionController::Base
before_action :configure_permitted_parameters, if: :devise_controller?
#↑これ#
private
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:nickname])
#↑(:deviseの処理名, keys: [:許可したいキー(カラム名)])
end
end
これでほとんどの実装ができました。あとはpermitも後を自分のしたい事に応じて編集するだけです。
上記は
deviseの処理名 = :sign_up
keys = [:nickname]
で実装してます。
6.まとめ
手順のポイントは
application_controller.rbに記述
before_actionを設定
sanitizer.permitメソッドを使用
以上、deviseの「新規登録」「ログイン」「情報更新」機能をカスタマイズする際に必要なストロングパラメーターのsanitizerメソッドについてでした。
###最後に
私はプログラミング初学者ですが、同じ様に悩んでる方々の助けになればと思い、記事を投稿しております。
それでは、また次回お会いしましょう〜