我有一个加密电子邮件地址的用户模型
class User < ApplicationRecord
encrypts :email
end
在禁用加密和创建新用户后,我可以运行User.authenticate_by(email: params[:email], password: params[:password])
来验证用户。
但是,当启用电子邮件加密并注册用户时,authenticate_by
方法返回nil
。
我可以在控制台中看到这个:
irb(main):001> User.authenticate_by(email: "[email protected]", password: "some_password")
User Load (1.5ms) SELECT "users".* FROM "users" WHERE "users"."email" = $1 LIMIT $2 [["email", "{\"p\":\"vAcGA4sdf3rwesdfhHM6dfdsfdfdhuH+g==\",\"h\":{\"iv\":\"sdfs24434+ubm2y\",\"at\":\"9CfwefsefYT66SOwsdfsdf==\"}}"], ["LIMIT", 1]]
如何使用加密的电子邮件地址运行User.authenticate_by
方法?
1条答案
按热度按时间cx6n0qe31#
问题是,我使用了开箱即用的非确定性加密方法,这种方法更安全,但无法查询数据库。使用非确定性加密,您无法检索记录,例如使用:
相反,我不得不改用一种不太安全的确定性方法
有了这个,
authenticate_by
也可以工作。