ruby-on-rails - 设计 valid_password 的奇怪问题?

标签 ruby-on-rails devise ruby-on-rails-3.2

在过去的 2 个小时里,我一直在尝试调试 devise 中的一个奇怪问题,该问题不允许我登录。

这也是我提到的内容:

password 
=> 'vinodsobale'

password == 'vinodsobale'
=> true

resource.valid_password?(password)

=> false

resource.valid_password?('vinodsobale')

=> true

附上屏幕截图:

enter image description here 注意:我已经在devise内部启用了调试器,因此上面的代码是devise内部代码。

对我来说,这看起来像是 Devise.secure_compare 中的问题。

最佳答案

此问题是由于 Ruby 2.2.0 中已知的字符串损坏错误 fixed 造成的。在2.2.2中。

bug report 中所述,当 BCrypt 从其 C 扩展调用特定的字符串创建 API 时,发生了损坏,Devise v3.3.0 通过调用 ::BCrypt::Engine.hash_secret 触发了该 API。来自 Devise::Models::DatabaseAuthenticatable#valid_password? 方法。特定于设计的workaround针对此错误已在 v3.5.0 中发布。

解决方案是:

  • 将 Ruby 降级至 < 2.2.0 ,或升级至 >= 2.2.2 ;
  • 将设备升级至 >= 3.5.0 .

关于ruby-on-rails - 设计 valid_password 的奇怪问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34136044/

相关文章:

ruby-on-rails - Nginx 和乘客依赖问题( digital ocean 部署)

ruby-on-rails - acts_as_follower 无法与我的 Rails3.2 应用程序正常工作

ruby-on-rails - 如何合并 Redis 哈希和 Rails 记录?

ruby-on-rails - 在 rspec 特性测试中使用 Devise

heroku - 在 Heroku 数据库中存储图像的最简单方法?

rspec - FactoryGirl 与 has_one 和 Beings_to 关联的问题

ruby-on-rails - Rails 中包含 Dragonfly gem 图像的重复记录

ruby-on-rails - 两种不同的注册表单

ruby-on-rails - OmniAuth 和 Devise,如何设置可选密码

ruby-on-rails - 将文件发送到 Rails JSON API