1

我是 Rails 的新手,来自 PHP + Python 背景。我正在基于生产数据库转储在我的机器上设置开发环境。

我无法登录我的开发环境,因为无论用户或密码如何,每个用户登录都失败并出现 BCrypt InvalidHash 错误。

我在一个在线 BCrypt 网站上根据我的密码检查了users.encrypted_password哈希值——它匹配正确。

我写了一个快速脚本来重置所有密码,看看我的 Fedora 机器和 prod Heroku 配置之间是否存在一些奇怪的配置差异:

User.find_each do |user|
  user.password = 'password'
  user.save
end

但这仍然因相同的 InvalidHash 错误而失败,堆栈跟踪如下:

/home/eric/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bcrypt-3.1.11/lib/bcrypt/password.rb:60:in `initialize': invalid hash (BCrypt::Errors::InvalidHash)
    from /home/eric/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bcrypt-3.1.11/lib/bcrypt/password.rb:46:in `new'
    from /home/eric/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/bcrypt-3.1.11/lib/bcrypt/password.rb:46:in `create'
    from /home/eric/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/clearance-1.16.1/lib/clearance/password_strategies/bcrypt.rb:28:in `password='
    from /home/eric/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/clearance-1.16.1/lib/clearance/user.rb:111:in `password='
    from db/reset_passwords.rb:9:in `block in <top (required)>'

clear.rb 配置:

Clearance.configure do |config|
  config.rotate_csrf_on_sign_in = true
  config.password_strategy = Clearance::PasswordStrategies::BCrypt
end

型号详情:

> User.column_names
=> ["id", "first_name", "email", "encrypted_password", "confirmation_token", "remember_token"]

我究竟做错了什么?似乎我的开发环境缺少某种配置。

4

1 回答 1

1

有人建议我的操作系统有问题。我尝试了一个简单BCrypt::Password.create("password")的,以同样的方式失败了。这让我去了他们的 GitHub ......

https://github.com/codahale/bcrypt-ruby/issues/170

所以 bcrypt-ruby 在 Fedora 28+ 上崩溃了。版本 3.1.12 被推送来解决这个问题。我们的项目仍在使用 3.1.11。

经验教训:检查依赖项!

于 2019-05-13T18:13:15.820 回答