1. コンソール内で新しいユーザーを作成してみてください。新しいユーザーの記憶トークンと有効化トークンはどのような値になっているでしょうか? また、各トークンに対応するダイジェストの値はどうなっているでしょうか?
# rails console --sandbox
>> user = User.new
=> #<User id: nil, name: nil, email: nil, created_at: nil, updated_at: nil, password_digest: nil, remember_digest: nil, admin: false, activation_digest: nil, activated: false, activated_at: nil>
この時点では全ての属性がnil
かfalse
ですね。これではauthenticated?
メソッドが実行できません。有効な属性を与えていきましょう。
>> name = Faker::Name.name
=> "Alayna Hudson"
>> email = "example-00@railstutorial.org"
=> "example-00@railstutorial.org"
>> password = "password"
=> "password"
>> User.create!( name: name,
?> email: email,
?> password: password,
?> password_confirmation: password,
?> )
...略
=> #<User id: 103, name: "Alayna Hudson", email: "example-00@railstutorial.org", created_at: "2019-12-07 13:35:32", updated_at: "2019-12-07 13:35:32", password_digest: "$2a$10$1kYvhTz6MR/F9bekfJHmaewVSkCYxSrnG7EpRUkqiaV...", remember_digest: nil, admin: false, activation_digest: "$2a$10$L3A798aHfZ9Z5l8IkZ03Re0wdzo8eP227clGfD.k5L7...", activated: false, activated_at: nil>
>> user = User.find_by(email: "example-00@railstutorial.org")
...略
=> #<User id: 103, name: "Alayna Hudson", email: "example-00@railstutorial.org", created_at: "2019-12-07 13:35:32", updated_at: "2019-12-07 13:35:32", password_digest: "$2a$10$1kYvhTz6MR/F9bekfJHmaewVSkCYxSrnG7EpRUkqiaV...", remember_digest: nil, admin: false, activation_digest: "$2a$10$L3A798aHfZ9Z5l8IkZ03Re0wdzo8eP227clGfD.k5L7...", activated: false, activated_at: nil>
有効なユーザー情報が得られました。
この時点では、remember_token
ならびにactivation_token
はnil
です。
>> user.remember_token
=> nil
>> user.activation_token
=> nil
発展1. コンソールから、有効なremember_token
とremember_digest
の組を取得してみましょう。
続いて、有効なremember_token
とremember_digest
の組を生成していきます。
>> user.remember
(0.1ms) SAVEPOINT active_record_1
SQL (0.2ms) UPDATE "users" SET "updated_at" = ?, "remember_digest" = ? WHERE "users"."id" = ? [["updated_at", "2019-12-07 13:47:33.270269"], ["remember_digest", "$2a$10$vffDzd.WhIA1Pqr253/x8essHdEoHO8y6UYioEW3OGSr7uAcGfMcS"], ["id", 103]]
(0.1ms) RELEASE SAVEPOINT active_record_1
=> true
発展2. コンソールから、有効なactivation_token
とactivation_digest
の組を取得してみましょう。
>> user.activation_token = User.new_token
=> "8wuF8jduRAEQmojrqyBX0w"
>> user.update_attribute(:activation_digest, User.digest(user.activation_token))
(0.1ms) SAVEPOINT active_record_1
SQL (0.2ms) UPDATE "users" SET "updated_at" = ?, "activation_digest" = ? WHERE "users"."id" = ? [["updated_at", "2019-12-08 02:57:37.023207"], ["activation_digest", "$2a$10$hjQAsSsaf9z8N.uIex4VwOPv9jC53HFConZKuKkVxXjlrm2CaErBe"], ["id", 103]]
(0.1ms) RELEASE SAVEPOINT active_record_1
=> true
2. リスト 11.26で抽象化したauthenticated?
メソッドを使って、先ほどの各トークン/ダイジェストの組み合わせで認証が成功することを確認してみましょう。
発展1.および発展2.の続きです。
>> user.authenticated?(:remember, user.remember_token)
=> true
>> user.authenticated?(:activation, user.activation_token)
=> true