こんにちは。
やっと夏が来たと思いきやもう秋ですね。今日から栗開きです!
どうもハチマキです。
はじめに
今回新たにdevise機能を実装してみました。
deviseの実装方法の記事は色々あったため、今回はデータの流れからdeviseの仕組みを読み解いていきたいと思います。
もし実装方法が知りたいという方であれば、参考にさせて頂いた記事を載せておりますので、そちらを見ていただけたらと思います。
では早速行きましょう!
本日の概要 : メール認証機能「devise」の仕組み
事象
会員登録などでよく使われるメール認証機能(会員登録前にメール送信を行い、リンククリックによって本登録ができる)を実装したい!
そんな時に役立つのが、今回のdeviseです。
仕組み
deviseの実装を進めていくと、db:migrateを行い下記4つのカラムをDBに追加していきます。
- confirmation_token
- confirmed_at
- confirmation_sent_at
- unconfirmed_email
メール認証を実装する上では、追加したconfirmation_tokenカラム、confirmed_atカラムが肝になります。
consoleでデータの流れをみる(会員登録を想定し進めていきます)
①
deviseを実装し、登録フォームで登録を行うと、まず追加したカラムのconfirmation_tokenにパラメータが入ります。
これが言わば、仮会員登録の状態です。
$ rails c [1] pry(main)> User.last User Load (0.8ms) SELECT `users`.* FROM `users` ORDER BY `users`.`id` DESC LIMIT 1 => #<User id: 1, email: test@gmail.com", confirmation_token: "test-hoge123450", confirmed_at: nil, confirmation_sent_at: "2020-09-05 01:42:40", unconfirmed_email: nil>
②
登録を行うことで、SMTPから登録したメールアドレスにメールが送信されます。
送信されたメールのリンクをクリックすることで、confirmation_tokenに入ったパラメータがnilになり、confirmed_atにリンクをクリックした日時が入ります。
これが、本会員登録(メール認証が完了)した状態になります。
[2] pry(main)> User.last User Load (0.8ms) SELECT `users`.* FROM `users` ORDER BY `users`.`id` DESC LIMIT 1 => #<User id: 1, email: test@gmail.com", confirmation_token: nil, confirmed_at: "2020-09-05 01:44:31", confirmation_sent_at: "2020-09-05 01:42:40", unconfirmed_email: nil>
③
よって、ブラウザではログインができる状態になります。
この一連のデータの流れがメール認証機能の仕組みです!結構シンプルでした。
カラムの補足
- confirmation_sent_at: "2020-09-05 01:42:40"
- 認証用メールが送られた日時のデータ
- unconfirmed_email: nil
- メールアドレスの変更時に使用。確認用メールを送信し、そのリンクを実行した場合に値が変更されます(※今回のメール認証では不要)
参考資料
【Rails】deviseの使い方をマスターしてログイン認証機能を実装 | Pikawaka - ピカ1わかりやすいプログラミング用語サイト
Deviseで送信されるメールのfrom(送信者メールアドレス)を変更 | EasyRamble
Rails4 devise導入 - Qiita
【Rails】deviseでURL認証付きのメールを送信してみる - Qiita
Rails deviseによるユーザー認証 メールによる認証、emailとusernameのどちらでもログイン可能にするまで - Qiita
devise でメールアドレスのみでユーザー登録を行い、パスワードを後から設定する方法 - Qiita
【Rails】Deviseでユーザーログイン後のリダイレクト先を変更 - Qiita
【Rails5】devise でログイン後ページをユーザー意図に合わせて変更する - グロースエンジニアのブログ
devise デフォルトルーティングのカスタマイズ - Qiita
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
日々勉強です。
以上、ハチマキでした。