ruby-on-rails - Rails > 设计密码加密

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

我正在尝试实现一种方法,以允许无论如何从设计之外的另一个服务更改密码。

# Profile password change
def change_password(oldpass, newpass)
    pepper  = nil
    cost    = 10

    # Encrypt plain text passwords
    encrypt_old     = ::BCrypt::Password.create("#{oldpass}#{pepper}", :cost => cost).to_s

    # Validate old
    if self.encrypted_password == encrypt_old
        encrypt_new     = ::BCrypt::Password.create("#{newpass}#{pepper}", :cost => cost).to_s
        self.encrypted_password = encrypt_new
        self.save
    else
        Logger.new("Wrong old password!")
    end
end

似乎我的密码加密错误 oldpass 包含旧密码的纯文本,我需要对其进行哈希处理,看看它是否与当前密码匹配,然后允许存储新密码。然而,我得到的只是错误的密码。

重做:
def change_password(oldpass, newpass)
    if valid_password?(oldpass)
        password = newpass
        save
        return true
    else
        return false
    end
end

最佳答案

如果您在应用程序或 Rails 控制台中,则不需要自己加密密码。

只需按照以下方式更新用户,Devise 就会自行处理。

user.password = new_password
user.save

然后设计将加密密码并存储它。您只需要确保 user.password_confirmationnil .如 password_confirmation是别的,它将与 password 匹配.

编辑

您可以通过以下方式检查现有密码:user.valid_password?(old_password)

关于ruby-on-rails - Rails > 设计密码加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15647310/

相关文章:

ruby-on-rails - ruby 从数组中添加字符串

ruby-on-rails - 带有isolate_namespace但在表上没有前缀命名空间的Rails可挂载引擎

ruby-on-rails - rails : sign out logged in user on event

ruby-on-rails - 使用 sort_link 搜索嵌套资源

ruby-on-rails - 添加自定义参数以设计注册 - 未经许可的参数

ruby-on-rails - Rails 5 ActionCable 错误描述和拒绝连接

ruby-on-rails - ruby rails : how to incorporate spreadsheets

ruby-on-rails - 没有这样的文件要加载-bcrypt_ext(通过devise)

javascript - 错误! 404 未找到 : @babel/preset-vue@^7. 1.0

html - 助手中的 image_tag 未传递要查看的选项