Quantcast
Channel: 初心者タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 22058

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

$
0
0

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

Viewing all articles
Browse latest Browse all 22058

Trending Articles