Ruby on Rails チュートリアルの第10章のメモです。第10章では、普段利用するWebサービスに必ずやある「アカウントの有効化」と「パスワードのリセット」機能を実装します!Railsによるメール送信の仕組みを学ぶことができます!
第10章 アカウント有効化とパスワード再設定 | Rails チュートリアル
Railsにおけるアカウントの有効化
誰でもユーザの登録を許可してしまうと、本人じゃない人でも勝手に他の人のメールアドレスで登録できてしまう
これを防ぐために、実際にメールを送信して本人確認をする
基本的なフローは以下のようになる
- ユーザの初期状態は「有効化されていない」(unactivated)にする
- ユーザの登録が行われた時に、有効化トークンとそれに対応する有効化ダイジェストを生成する
- 有効化ダイジェストは発行したトークンが正しいかアプリケーション側で確認するためのもの
- 有効化ダイジェストはデータベースに保存する。有効化トークンはメールアドレスと一緒に、有効化メールのリンクに組み込む
- ユーザがメールのリンクをクリックしたら、アプリケーション側はメールアドレスをキーにしてユーザを検索し、データベース内に保存しておいた有効化ダイジェストと比較してトークン認証する
- ユーザの認証が正しく行われた場合、ユーザのステータスを「有効化されている」(activated)に変更する
メソッド参照
before_create :create_activation_digest
create_activation_digest
をRailsが探してくれる
メールプレビュー機能
Railsでは特殊なURLにアクセスするとメールのメッセージをその場でプレビューすることができる
メールを実際に送信しなくていいから便利
config/environments/development.rb
を以下のように設定する
Rails.application.configure do
.
.
.
config.action_mailer.raise_delivery_errors = true
config.action_mailer.delivery_method = :test
host = 'example.com'
config.action_mailer.default_url_options = { host: host }
.
.
.
end
バリデーションをかけない属性更新
update_attributes
ではなくupdate_attribute
を利用する
assignsメソッド
対応するアクション内にあるインスタンス変数にアクセスできるようになる
パスワードリセット
全体の流れは以下のようになる
- パスワードの再設定のリクエストをすると、ユーザが送信したメールアドレスをキーにしてデータベースからユーザを検索
- ユーザが見つかった場合、再設定用トークンとそれに対応する再設定用ダイジェストを生成
- 再設定用のダイジェストをデータベースに保存し、再設定用トークンはメールアドレスとともに、ユーザに送信する有効化用のメールのリンクに組み込む
- ユーザがメールのリンクをクリックしたら、アプリケーションはメールアドレスをキーにしてユーザを検索し、データベース内に保存しておいた再設定用ダイジェストと比較しトークンを認証する
- 認証に成功したら、パスワード変更用のフォームをユーザに表示
Ruby on Rails チュートリアル 「第10章 アカウント有効化とパスワードリセット」のまとめ
- Railsでメール送信はActiveMaileを利用する
- パスワードの再設定は Active Recordオブジェクトではないが、セッションやアカウント有効化の場合と同様に、リソースでモデル化できる
- アカウント有効化やパスワード再設定では、ユーザーを有効化したりパスワードを再設定するために一意のURLを作成する。一意のURLには生成したトークンが使用される
第8章から徐々に内容が濃くなっていて、結構時間かかるしテストコード量が。。
チュートリアルを読みつつ、写経するだけになりつつある
かかった時間は3時間ほど
Ruby on Rails チュートリアル 第10章までかかった合計時間は19時間
あと、残り2章だ!
続きの記事はこちら!
Ruby on Rails チュートリアル 「第11章 ユーザのマイクロポスト」をやってみた
Ruby on Railsのおすすめ書籍はこちら!