Ruby on Rails

【Ruby on Rails】チュートリアル 「第10章 アカウント有効化とパスワードリセット」をやってみた

Ruby on Rails チュートリアルの第10章のメモです。第10章では、普段利用するWebサービスに必ずやある「アカウントの有効化」と「パスワードのリセット」機能を実装します!Railsによるメール送信の仕組みを学ぶことができます!

第10章 アカウント有効化とパスワード再設定 | Rails チュートリアル

Railsチュートリアル第10章をやってみた

Railsにおけるアカウントの有効化

誰でもユーザの登録を許可してしまうと、本人じゃない人でも勝手に他の人のメールアドレスで登録できてしまう
これを防ぐために、実際にメールを送信して本人確認をする
基本的なフローは以下のようになる

  1. ユーザの初期状態は「有効化されていない」(unactivated)にする
  2. ユーザの登録が行われた時に、有効化トークンとそれに対応する有効化ダイジェストを生成する
    • 有効化ダイジェストは発行したトークンが正しいかアプリケーション側で確認するためのもの
  3. 有効化ダイジェストはデータベースに保存する。有効化トークンはメールアドレスと一緒に、有効化メールのリンクに組み込む
  4. ユーザがメールのリンクをクリックしたら、アプリケーション側はメールアドレスをキーにしてユーザを検索し、データベース内に保存しておいた有効化ダイジェストと比較してトークン認証する
  5. ユーザの認証が正しく行われた場合、ユーザのステータスを「有効化されている」(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メソッド

対応するアクション内にあるインスタンス変数にアクセスできるようになる

パスワードリセット

全体の流れは以下のようになる

  1. パスワードの再設定のリクエストをすると、ユーザが送信したメールアドレスをキーにしてデータベースからユーザを検索
  2. ユーザが見つかった場合、再設定用トークンとそれに対応する再設定用ダイジェストを生成
  3. 再設定用のダイジェストをデータベースに保存し、再設定用トークンはメールアドレスとともに、ユーザに送信する有効化用のメールのリンクに組み込む
  4. ユーザがメールのリンクをクリックしたら、アプリケーションはメールアドレスをキーにしてユーザを検索し、データベース内に保存しておいた再設定用ダイジェストと比較しトークンを認証する
  5. 認証に成功したら、パスワード変更用のフォームをユーザに表示

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のおすすめ書籍はこちら!


-Ruby on Rails