【发布时间】:2016-03-12 04:50:32
【问题描述】:
在过去的 2 小时里,我一直在尝试调试设计中的一个奇怪问题,该问题不允许我登录。
这也是我所指的东西:
password
=> 'vinodsobale'
password == 'vinodsobale'
=> true
resource.valid_password?(password)
=> false
resource.valid_password?('vinodsobale')
=> true
附上截图:
注意:我在 devise 中启用了调试器,所以上面的代码是 devise 内部代码。
对我来说,这似乎是Devise.secure_compare 中的一个问题。
【问题讨论】:
-
打开 GitHub 问题?最好使用可重复的测试。
-
@Viren - 我对 ruby 或设计一无所知,但我会检查给定密码的编码。
-
你能做一个
password.encoding并告诉我们结果吗?这是我唯一能想到的出错的地方。您还可以使用::BCrypt::Engine.hash_secret(password, salt)并将其与实际存储的哈希值进行比较。对于这种比较,text.bytes也可能会派上用场。 -
您能检查一下
password.bytes和'vinodsobale'.bytes以确认一下吗? -
@lad2025,你说的“得救”是什么意思?是
password吗?如果是,NULL character \0应编码为 unicode,password == 'vinodsobale'不应返回true。
标签: ruby-on-rails devise ruby-on-rails-3.2