Railsチュートリアル 第11章 メモ書き
○アカウントの有効化
新規登録したユーザーが本当にそのメールアドレスの持ち主なのかを確認するための有効化。
1)ユーザーの初期状態はunactivated
2)登録時に有効化トークンとそれに対応する有効化ダイジェストを生成
3)有効化ダイジェストはデータベースに保存
4)有効化トークンとメールアドレスを含めたリンクをユーザーにメールに送信
5)ユーザーがリンクをクリックしたら、アドレスをキーとしてデータベース内の有
効化ダイジェストと比較、トークンを認証
6)ユーザーのステータスをactivatedに
・AccountActivationsリソース:
ActiveRecordのモデルではなく、セッション機能を使ってUserモデルに追加する。
注意として、有効化はRESTルールに従うと、PATChリクエストとupdateアクションに
なるはずだが、有効化リンクをメールで送る関係上、ブラウザからのリクエストはGETであり、editアクションに変更する必要がある。
リクエスト URL Action 名前付きルート
GET /account_activation/トークン/edit edit edit_account_activation_url(token)
・データベースにはactivated属性(boolean)とactivated_at属性(datetime)を追加する。
・有効化トークンやダイジェストはユーザーオブジェクトが作成される前に作成する必要がある
→before_createコールバックを定義する。
before_create :create_activation_digest
・privateキーワード:これより下のメソッドは自動的に非公開に
・Action Mailer:
メール送信に必要なライブラリ。メイラーの構成はコントローラのアクションに近似し、メールのテンプレートをビューと同じ要領で定義できる。
・rails generate mailer UserMailer account_activation password_reset
でUserメイラー、account_activateionメソッド、password_resetメソッドが生成される
・メイラーのビューはテキストとHTMLの2つが生成される。
・クエリパラメータ:URLの末尾で?に続けてキーと値のペアを記述したもの
エスケープ:通常URLでは使えない文字(@など)を扱えるように変換する手法。
account_activations/q5lt38hQDc_959PVoo6b7A/edit?email=foo%40example.com
+生成したトークンで一意のURLを作成できる。
・Railsにはメールを送信しなくともメールのプレビューを確認する機能がある。
・メタプログラミング:プログラムでプログラムを作成すること。
式展開を利用してメソッドを引数として別メソッドに渡すこと。
・if user && !user.activated? && user.authenticated?(:activation, params[:id])
→ !user.activated?はユーザーを再度有効化しないために必要
・Herokuで本番環境からメールを送信する場合、
SendGridというアドオンを利用して、アカウントを検証する。
config/environments/production.rbの設定変更後、
heroku addons:create sendgrid:starterを実行