【发布时间】:2019-05-11 23:31:58
【问题描述】:
我是 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)>'
clearance.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"]
我做错了什么?我的开发环境似乎缺少某种配置。
【问题讨论】:
-
我看到你正在使用 Rails。您可能需要查看 Rails 的
has_secure_password功能,以使用 BCrypt 安全地存储密码/验证用户。 api.rubyonrails.org/classes/ActiveModel/SecurePassword/… -
Clearance 是一个 Ruby Gem,它复制
has_secure_password以自动处理密码重置等。如果我无法弄清楚 Clearance 损坏的原因,我将不得不将其撕掉并用基本的 Railshas_secure_password替换它。但它在生产环境中运行良好的事实非常令人困惑。 -
诚然,我从未听说过 Clearance,尽管我非常尊重 Thoughtbot。有时间我得研究一下这颗宝石。
-
你也应该设置
password_confirmation吗? -
stackoverflow.com/a/11038412/10068463这个答案可能对你有帮助!
标签: ruby-on-rails ruby bcrypt clearance