第11章アカウントの有効化
アカウントを有効化する段取りは、ユーザーログイン、
特にユーザーの記憶と似ています。基本的な手順は次のようになります。
1:ユーザーの初期状態は「有効化されていない」(unactivated) にしておく。
2:ユーザー登録が行われたときに、有効化トークンと、
それに対応する有効化ダイジェストを生成する。
3:有効化ダイジェストはデータベースに保存しておき、有効化トークンは
メールアドレスと一緒に、ユーザーに送信する有効化用メールのリンクに仕込んでおく
4:ユーザーがメールのリンクをクリックしたら、アプリケーションはメールアドレス
をキーにしてユーザーを探し、データベース内に保存しておいた
有効化ダイジェストと比較することでトークンを認証する。
5:ユーザーを認証できたら、ユーザーのステータスを「有効化されていない」から
「有効化済み」(activated) に変更する。
今回実装するアカウント有効化やパスワード再設定の仕組みと、
以前に実装したパスワードや記憶トークンの仕組みにはよく似た点が多いので、
多くのアイデアを使い回すことができます。
(具体的にはUser.digestやUser.new_token、改造版のuser.authenticated?メソッドなど)。
それぞれの仕組みの似ている点をまとめてみました
検索キー string digest authentication email password password_digest authenticate(password) id remember_token remember_digest authenticated?(:remember, token) email activation_token activation_digest authenticated?(:activation, token) email reset_token reset_digest authenticated?(:reset, token)
11.1 AccountActivationsリソース
ユーザーからのGETリクエストを受けるために、(本来であればupdateのところを)editアクションに変更して使っていきます。
11.1.1 AccountActivationsコントローラ
AccountActivationsリソースを作るために、
まずはAccountActivationsコントローラを生成してみましょう。
rails generate controller AccountActivations
有効化のメールには次のURLを含めることになります。
edit_account_activation_url(activation_token, ...)
editアクションへの名前付きルートが必要になるということです。そこでまずは、名前付きルートを扱えるようにするため、ルーティングにアカウント有効化用のresources行を追加します。
アカウント有効化に使うリソース (editアクション) を追加する
config/routes.rb
Rails.application.routes.draw do root 'static_pages#home' get '/help', to: 'static_pages#help' get '/about', to: 'static_pages#about' get '/contact', to: 'static_pages#contact' get '/signup', to: 'users#new' get '/login', to: 'sessions#new' post '/login', to: 'sessions#create' delete '/logout', to: 'sessions#destroy' resources :users resources :account_activations, only: [:edit] end
HTTPリクエスト Action 名前付きルート URL GET edit edit_account_activation_url(token) /account_activation/<token>/edit