deviseの導入
devise
ユーザー管理機能を簡単に実装するためのGem。
Gemfileを編集
gem 'devise'
コマンドを実行してGemをインストール
% bundle install
ローカルサーバーを再起動
% rails s
deviseの設定ファイルを作成
% rails g devise:install
deviseのUserモデルを作成
rails g devise user
テーブルを作成
マイグレーションを実行
% rails db:migrate
ローカルサーバーを再起動
% rails s
deviseのビューファイルを作成
% rails g devise:views
ストロングパラメーターを使えるようにする
サインアップ時に入力する情報はパラメーターとしてサーバーに送信される。deviseを使わない通常のリクエストの場合は、コントローラーにストロングパラメーターを記述し、受け取れるパラメーターを制限していた。deviseに関しても、同様にストロングパラメーターをコントローラーに記述する。しかし、deviseの処理を行うコントローラーはGem内に記述されているため、編集することができない。また、deviseでログイン機能を実装した場合は、paramsの他に、paramsとは異なる形のパラメーターも受け取っている。以上から、deviseのコントローラーにストロングパラメーターを反映する方法と、devise特有のパラメーターを取得する方法が、必要になる。
devise_parameter_sanitizerメソッド
deviseにおけるparamsのようなメソッドのこと。deviseのUserモデルに関わる「ログイン」「新規登録」などのリクエストからパラメーターを取得できる。このメソッドとpermitメソッドを組み合わせることにより、deviseに定義されているストロングパラメーターに対し、自分で新しく追加したカラムも指定して含めることができる。
devise_parameter_sanitizerメソッドは、これまでのストロングパラメーターと同じく、新たに定義するプライベートメソッドの中で使用する。deviseの提供元では、新たに定義するメソッド名をconfigure_permitted_parametersと紹介していることから、慣習的にこのメソッド名で定義することが多い。
deviseのpermitは、第一引数にdeviseの処理名、第二引数にkeysというキーに対し、配列でキーを指定することで、許可するパラメーターを追加する。第一引数の処理名には、deviseですでに設定されているsign_in, sign_up, account_updateが使用できる。
:sign_in サインイン(ログイン)の処理を行うとき
:sign_up サインアップ(新規登録)の処理を行うとき
:account_update アカウント情報更新の処理を行うとき
private
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:deviseの処理名, keys: [:許可するキー])
end
deviseのヘルパーメソッド
before_action :authenticate_user! ログイン済ユーザーのみにアクセスを許可する
current_user 現在ログインしているユーザーを取得する
user_signed_in? ユーザーがサインインしているかどうかを判定する
user_session ユーザーのセッション情報にアクセスする
Discussion