トークン認証を考案し、パスワードリセットトークンを持つユーザーを検索します

概要

私はデバイストークン認証を使用しており、パスワードリセットプロセスを設定しています。メール内のリセットリンクをクリックすると、URL パラメータにreset_password_token=hK3yxC1zVZCbWL8WgqKMが表示されますが、Railsコンソールでは

2.5.1 :004 > User.first.reset_password_token
  User Load (0.6ms)  SELECT  "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT $1  [["LIMIT", 1]]
 => "ab432079e4e8aacfa0ecb5df17a7cea169990b0e0809ea9553248064220471a7" 

これらのトークンは一致しませんが、一致するはずです。それは何らかの方法でエンコードされていますか? エンコードされている場合、トークンを持っているユーザーを見つけるにはどうすればよいですか?

解決策

データベースに保存されるのは、Digest::SHA256 です。

token = "hK3yxC1zVZCbWL8WgqKM"
Digest::SHA256.hexdigest token
#⇒ "ae74625ac2357c8f2de0f3f52647aaee191dbba5d383f8ec5822cfec5c24384e"

明らかに、それをトークンに戻すことはできません。ユーザーから取得したトークンを 16 進ダイジェストして、データベースに保存されているものと比較することしかできません。