gpt4 book ai didi

ruby-on-rails - 如何在 Rails 4.2 中使用 has_secure_password 加密密码

转载 作者:数据小太阳 更新时间:2023-10-29 07:21:20 26 4
gpt4 key购买 nike

我有一个 API 并且我安装了下一个 gem

 gem 'bcrypt' 

在我的用户模型中,我具体说明了:

has_secure_password

我的数据库有一个名字的字段

password_digest

当运行播种机时,密码是加密的,但是当尝试用我的方法创建新用户时,密码是正常的,这是我创建新用户的方法

def self.from_auth(data)
User.where(email: data[:email]).first_or_create do |user|
user.email = data[:info][:email]
user.name = data[:info][:name]
user.provider = data[:info][:provider]
user.uid = data[:info][:uid]
user.password_digest = data[:info][:password]
end
end

谢谢:)

最佳答案

密码未保存为 bcrypt 哈希。

来自 bycrypt 文档

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

require 'bcrypt'

my_password = BCrypt::Password.create("my password")#=> "$2a$10$vI8aWBnW3fID.ZQ4/zo1G.q1lRps.9cGLcZEiGDMVr5yUP1KUOYTa"

my_password.version #=> "2a"
my_password.cost #=> 10
my_password == "my password" #=> true
my_password == "not my password" #=> false

my_password = BCrypt::Password.new("$2a$10$vI8aWBnW3fID.ZQ4/zo1G.q1lRps.9cGLcZEiGDMVr5yUP1KUOYTa")
my_password == "my password" #=> true
my_password == "not my password" #=> false

所以你存储用户密码散列的代码应该是这样的

def self.from_auth(data)
User.where(email: data[:email]).first_or_create do |user|
user.email = data[:info][:email]
user.name = data[:info][:name]
user.provider = data[:info][:provider]
user.uid = data[:info][:uid]
user.password_digest = BCrypt::Password.create(data[:info][:password])
end
end

然后就可以像文档说的那样测试了 http://api.rubyonrails.org/classes/ActiveModel/SecurePassword/ClassMethods.html

关于ruby-on-rails - 如何在 Rails 4.2 中使用 has_secure_password 加密密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35383756/

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