gpt4 book ai didi

ruby-on-rails - Rails:BCrypt::Errors::InvalidHash(无效散列)设计 1.5.4 Rails 2.2.5

转载 作者:行者123 更新时间:2023-12-05 08:55:24 33 4
gpt4 key购买 nike

我们在 devise.rb 中使用以下内容

config.encryptor = :bcrypt

我们想把它改成

config.encryptor = :authlogic_sha512

还编写了代码来解密旧密码并在登录时将其散列为新密码(在 session Controller 内)

但是,在更新密码后,在注销和登录时出现错误

BCrypt::Errors::InvalidHash (invalid hash):

如果我注释掉错误的原始点,这个错误会随机出现。因此,我认为设计配置或 user.rb 模型存在问题。

用户模型有如下一行:

devise :database_authenticatable, :registerable, :confirmable,
:recoverable, :rememberable, :trackable, :validatable, :omniauthable, :omniauth_providers => [:auth0, :google_oauth2]

所以步骤顺序是这样的:

  1. 用户的信息存在于数据库中(现有用户)。使用 bcrypt 加密的密码
  2. 用户登录并在 session Controller 中,我们将密码重新散列为 sha512 并将其存储在 encrypted_pa​​ssword 字段中
  3. 用户退出
  4. 用户登录 *** 由于“invalid_hash”错误无法登录。

知道这里的问题是什么吗?提前致谢。

编辑:根据要求为上述第 2 步编写代码:

class Users::SessionsController < Devise::SessionsController
...
...
email = params[:user]['login']

@user = User.find_by_email(email)
return if @user.nil?
# Get old password and salt
bcrypt = BCrypt::Password.new(@user.encrypted_password)
salt = bcrypt.salt

pwd = params[:user]['password']

pass = ::BCrypt::Engine.hash_secret("#{pwd}#{Devise.pepper}", salt)
# If passwords, match, re-hash it with SHA-512
if @user.encrypted_password == pass
@user.password_digest = ::Devise::Encryptors::AuthlogicSha512.digest(pass, Devise.stretches, salt, Devise.pepper)
@user.password_salt = salt
@user.save!
end

我还在数据库表中添加了“password_digest”和“password_salt”,但我的“保存!”然后方法失败并显示“未传递额外参数”。

最佳答案

我在使用 Ruby 2.5 设置 Rails 5.1.6 应用程序时遇到了类似的问题。

当我尝试使用 rails db:seed 播种数据时遇到了以下错误:

rails aborted!
BCrypt::Errors::InvalidHash: invalid hash

我是这样解决的:

我使用的 Bcrypt 版本是 3.1.11,而 Devise 版本是 4.4.3

我将 gems 更新为 Bcrypt 3.1.16Devise 4.7.3 解决了这个问题。

资源:BCrypt::Errors::InvalidHash: invalid hash #4861

就这些。

希望对您有所帮助

关于ruby-on-rails - Rails:BCrypt::Errors::InvalidHash(无效散列)设计 1.5.4 Rails 2.2.5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46010754/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com