Closed yutokyokutyo closed 7 years ago
渡されたトークンがダイジェストと一致したらtrueを返す def authenticated?(remember_token) BCrypt::Password.new(remember_digest).is_password?(remember_token) end
irb(main):012:0> user.authenticated?('IPvHZnU8_HXx5h0MfmdwNg')
=> true
記憶トークンとDBに既に保存されている remember_digest を比較してtrueが返ってきているので authenticated? メソッドがやろうとしていることが達成されている。OK!
リスト 9.33にあるauthenticated?の式を削除すると、リスト 9.31の2つ目のテストで失敗することを確かめてみましょう (このテストが正しい対象をテストしていることを確認してみましょう)。
% rails t (git)-[advanced-login]
Running via Spring preloader in process 16051
Started with run options --seed 32346
FAIL["test_currnet_user_returns_nil_when_remember_digest_is_wrong", SessionsHelperTest, 0.12392451199957577]
test_currnet_user_returns_nil_when_remember_digest_is_wrong#SessionsHelperTest (0.12s)
Expected #<User id: 762146111, name: "Michael Example", email: "michael@example.com", created_at: "2017-04-10 02:12:06", updated_at: "2017-04-10 02:12:06", password_digest: "$2a$04$JynPOON9zd5zC6wW2LMNEeMN6FZentyGbiSpkx91YoR...", remember_digest: "$2a$04$j45WDTw99qOPc6/jvj4cDeqKit6e2vPxUg1M6N4ECg8..."> to be nil.
test/helpers/sessions_helper_test.rb:17:in `block in <class:SessionsHelperTest>'
28/28: [=========================================================================================================] 100% Time: 00:00:01, Time: 00:00:01
Finished in 1.76818s
28 tests, 70 assertions, 1 failures, 0 errors, 0 skips
heroku maintenance:on
なるほどぉ便利!
完!
9.1.1
コンソールを開き、データベースにある最初のユーザーを変数userに代入してください。その後、そのuserオブジェクトからrememberメソッドがうまく動くかどうか確認してみましょう。また、remember_tokenとremember_digestの違いも確認してみてください。