LoginSignup
0
1

More than 3 years have passed since last update.

Railsチュートリアル 第11章 アカウントの有効化 - 演習 - authenticated?メソッドの抽象化

Last updated at Posted at 2019-12-08

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>

この時点では全ての属性がnilfalseですね。これでは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_tokennilです。

>> user.remember_token
=> nil

>> user.activation_token   
=> nil

発展1. コンソールから、有効なremember_tokenremember_digestの組を取得してみましょう。

続いて、有効なremember_tokenremember_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_tokenactivation_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
0
1
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
1