###ユーザーのcreateアクションを更新
####ユーザー登録にアカウント有効化を追加する
app/controllers/users_controller.rb
lass UsersController < ApplicationController
.
.
.
def create
@user = User.new(user_params)
if @user.save
UserMailer.account_activation(@user).deliver_now
flash[:info] = "Please check your email to activate your account."
redirect_to root_url
else
render 'new'
end
end
.
.
.
end
####失敗するテストを一時的にコメントアウトする
test/integration/users_signup_test.rb
require 'test_helper'
class UsersSignupTest < ActionDispatch::IntegrationTest
test "invalid signup information" do
get signup_path
assert_no_difference 'User.count' do
post users_path, params: { user: { name: "",
email: "user@invalid",
password: "foo",
password_confirmation: "bar" } }
end
assert_template 'users/new'
assert_select 'div#error_explanation'
assert_select 'div.field_with_errors'
end
test "valid signup information" do
get signup_path
assert_difference 'User.count', 1 do
post users_path, params: { user: { name: "Example User",
email: "user@example.com",
password: "password",
password_confirmation: "password" } }
end
follow_redirect!
# assert_template 'users/show'
# assert is_logged_in?
end
end
###演習
1.
新しいユーザーを登録したとき、リダイレクト先が適切なURLに変わったことを確認してみましょう。その後、Railsサーバーのログから送信メールの内容を確認してみてください。有効化トークンの値はどうなっていますか?
https://*******5.vfs.cloud9.ap-northeast-1.amazonaws.com/account_activations/OGHN0ebW8H-S6dqER1u-bQ/edit?email=ghi%40jkl.com
コンソールを開き、データベース上にユーザーが作成されたことを確認してみましょう。また、このユーザーはデータベース上にはいますが、有効化のステータスがfalseのままになっていることを確認してください。
>> User.last
(1.7ms) SELECT sqlite_version(*)
User Load (1.1ms) SELECT "users".* FROM "users" ORDER BY "users"."id" DESC LIMIT ? [["LIMIT", 1]]
=> #<User id: 101, name: "c", email: "ghi@jkl.com", created_at: "2021-10-18 05:24:37", updated_at: "2021-10-18 05:24:37", password_digest: [FILTERED], remember_digest: nil, admin: false, activation_digest: "$2a$12$PS8VhZg/p4.1H/faHMtKae1LUk/HIUZLCAB.8KB3zlm...", activated: false, activated_at: nil>
どれが有効なステータスなのかわからない。