前提条件
devise gem(ver.4.7.1)を用いて以下を完了していることが前提となります。
✅基本的なユーザーログイン機能を実装していること
✅confirmable機能を用いて、以下のようにメール認証機能を実装していること。
- 新規登録画面で新規登録情報(アドレス、パスワード2回)を入力する
- 1.で入力したアドレスにページリンク付きアカウント確認メールが送信される
- 2のリンクからログイン画面に転送される (新規登録完了)
- ログイン画面でアドレス、パスワードを入力する
- ログイン完了し、ホーム画面にジャンプする
実現したいこと
確認メールのリンクをクリックすると登録完了はもちろん、自動でログイン状態になるようにしたい。(上記の動作で言うと、4.をスキップするイメージ)
方法
confirmations_controllerに以下を追記する。
..
private
def after_confirmation_path_for(resource_name, resource)
sign_in(resource)
root_path
end
簡単に解説すると、after_confirmation_path_for
はメール認証をした後に実行されるメソッドです(そのまんまですが)。
ここにsign_in
メソッドをオーバーライドすることでユーザーはログイン済み状態となります。
root_path
は、ログイン後にリダイレクトしたいページとします。
routeファイルに以下を追記する。
..
devise_for :users, controllers: {
confirmations: 'users/confirmations'
}
..
deviseで用意されたコントローラーをカスタマイズする場合、対象のルートを指定する必要があります。
これで完成です。
メール認証後ログイン状態となり、指定したURLへジャンプします。
注意
ユーザーが新規登録の際、間違ったemailアドレスを記入した場合、たまたまそのemailを受け取った第三者にアカウントを乗っ取られてしまう可能性があるので、注意が必要です。