LoginSignup
0
0

More than 1 year has passed since last update.

railsチュートリアル第11章 AccountActivationsリソース

Posted at

アカウントの有効化

アカウントを有効化するステップを新規登録の途中に差し込むことで、
本当にそのメールアドレスの持ち主なのかどうかを確認できるようにしてみます。

・ユーザーの初期状態は「有効化されていない」(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

2.
表 11.2の名前付きルートでは、_pathではなく_urlを使うように記してあります。なぜでしょうか? 考えてみましょう。ヒント: 私達はこれからメールで名前付きルートを使います。

urlをメールで使うから

`

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0