ruby-on-rails Rails authenticate_by与加密电子邮件

r1zhe5dt  于 2023-10-21  发布在  Ruby
关注(0)|答案(1)|浏览(153)

我有一个加密电子邮件地址的用户模型

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方法?

cx6n0qe3

cx6n0qe31#

问题是,我使用了开箱即用的非确定性加密方法,这种方法更安全,但无法查询数据库。使用非确定性加密,您无法检索记录,例如使用:

User.find_by(email: "[email protected]")
=> nil

相反,我不得不改用一种不太安全的确定性方法

class User < ApplicationRecord
  encrypts :email, deterministic: true
end

有了这个,authenticate_by也可以工作。

相关问题