#アカウントの有効化
アカウントを有効化するステップを新規登録の途中に差し込むことで、
本当にそのメールアドレスの持ち主なのかどうかを確認できるようにしてみます。
・ユーザーの初期状態は「有効化されていない」(unactivated)
・ユーザー登録が行われたときに、有効化トークンと、それに対応する有効化ダイジェストを生成
・有効化ダイジェストはデータベースに保存しておき、有効化トークンはメールアドレスと一緒に、ユーザーに送信する有効化用メールのリンクに仕込んでおく
・ユーザーがメールのリンクをクリックしたら、アプリケーションはメールアドレスをキーにしてユーザーを探し、データベース内に保存しておいた有効化ダイジェストと比較することでトークンを認証する。
・ユーザーを認証できたら、ユーザーのステータスを「有効化されていない」から「有効化済み」(activated)に変更
##AccountActivationsリソース
セッション機能(8.1)を使って、アカウントの有効化という作業を「リソース」としてモデル化することにします。
$ git checkout -b account-activation
###AccountActivationsコントローラ
ubuntu:~/environment/sample_app (account-activation) $ rails generate controller AccountActivations
Running via Spring preloader in process 3511
create app/controllers/account_activations_controller.rb
invoke erb
create app/views/account_activations
invoke test_unit
create test/controllers/account_activations_controller_test.rb
invoke helper
create app/helpers/account_activations_helper.rb
invoke test_unit
invoke assets
invoke scss
create app/assets/stylesheets/account_activations.scss
####アカウント有効化に使うリソース(editアクション)を追加する
config/routes.rb
Rails.application.routes.draw do
get 'sessions/new'
root 'static_pages#home'
# 何の意味がわからん
# ホーム画面がhomeページなるらしい
get '/help', to: 'static_pages#help'
# static_pagesコントローラからhomeアクションに紐付けされる
# getでアクセルすることでページを取得することができる
get '/about', to: 'static_pages#about'
# 何を書いているかはわからない
get '/contact', to: 'static_pages#contact'
# aboutアクションにGETリクエストを送る
get '/signup', to: 'users#new'
# urlに/signupと書くとuserコントローラのnewアクションを起こす
get '/login', to: 'sessions#new'
# データを取得
post '/login', to: 'sessions#create'
# データを投稿
delete '/logout', to: 'sessions#destroy'
# 削除
resources :users
# /users/1の有効にするため
resources :account_activations, only: [:edit]
# editアクションへの名前付きルートが必要になるため
# ルーティングのアカウント有効化
end
リクエスト GET
URL /account_activation/トークン/edit
Action edit
名前付きルート edit_account_activation_url(token)
###演習
1.
現時点でテストスイートを実行すると green になることを確認してみましょう。
ubuntu:~/environment/sample_app (account-activation) $ rails t
Running via Spring preloader in process 4158
Started with run options --seed 14759
43/43: [============================] 100% Time: 00:00:08, Time: 00:00:08
Finished in 8.73823s
43 tests, 168 assertions, 0 failures, 0 errors, 0 skips
表 11.2の名前付きルートでは、_pathではなく_urlを使うように記してあります。なぜでしょうか? 考えてみましょう。ヒント: 私達はこれからメールで名前付きルートを使います。
urlをメールで使うから
`