😕

deviseの導入

2021/01/17に公開

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