如何在 Rails 4.2 中使用 has_secure_password 加密密码
How to encrypt password with has_secure_password in Rails 4.2
我有一个 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
谢谢:)
不要直接写password_digest
属性。请改用 password
(可能还有 password_confirmation
),Rails 将为您带来神奇效果。
改变
user.password_digest = data[:info][:password]
到
user.password = data[:info][:password]
user.password_confirmation = data[:info][:password]
我建议阅读 docs for has_secure_password
。
密码未保存为 bcrypt 哈希。
来自 bycrypt 文档
https://github.com/codahale/bcrypt-ruby
require 'bcrypt'
my_password = BCrypt::Password.create("my password")#=> "a$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("a$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
我有一个 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
谢谢:)
不要直接写password_digest
属性。请改用 password
(可能还有 password_confirmation
),Rails 将为您带来神奇效果。
改变
user.password_digest = data[:info][:password]
到
user.password = data[:info][:password]
user.password_confirmation = data[:info][:password]
我建议阅读 docs for has_secure_password
。
密码未保存为 bcrypt 哈希。
来自 bycrypt 文档
https://github.com/codahale/bcrypt-ruby
require 'bcrypt'
my_password = BCrypt::Password.create("my password")#=> "a$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("a$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