2
4

More than 3 years have passed since last update.

deviseのconfirmable機能において、メール認証後にログイン状態にする方法

Posted at

前提条件

devise gem(ver.4.7.1)を用いて以下を完了していることが前提となります。

✅基本的なユーザーログイン機能を実装していること
✅confirmable機能を用いて、以下のようにメール認証機能を実装していること。
1. 新規登録画面で新規登録情報(アドレス、パスワード2回)を入力する
2. 1.で入力したアドレスにページリンク付きアカウント確認メールが送信される
3. 2のリンクからログイン画面に転送される (新規登録完了)
4. ログイン画面でアドレス、パスワードを入力する
5. ログイン完了し、ホーム画面にジャンプする

実現したいこと

確認メールのリンクをクリックすると登録完了はもちろん、自動でログイン状態になるようにしたい。(上記の動作で言うと、4.をスキップするイメージ)

方法

confirmations_controllerに以下を追記する。

users/confirmations_controller.rb
..
private
  def after_confirmation_path_for(resource_name, resource)
    sign_in(resource)
    root_path
  end

簡単に解説すると、after_confirmation_path_forはメール認証をした後に実行されるメソッドです(そのまんまですが)。
ここにsign_inメソッドをオーバーライドすることでユーザーはログイン済み状態となります。
root_pathは、ログイン後にリダイレクトしたいページとします。

routeファイルに以下を追記する。

route.rb
..
  devise_for :users, controllers: {
    confirmations: 'users/confirmations'
  }
..

deviseで用意されたコントローラーをカスタマイズする場合、対象のルートを指定する必要があります。

これで完成です。
メール認証後ログイン状態となり、指定したURLへジャンプします。

注意

ユーザーが新規登録の際、間違ったemailアドレスを記入した場合、たまたまそのemailを受け取った第三者にアカウントを乗っ取られてしまう可能性があるので、注意が必要です。

参考:

How To: Add :confirmable to Users

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4