Rul*_*Rul 4 ruby encryption ruby-on-rails bcrypt-ruby ruby-on-rails-4
我有一个API,我安装了下一个gem
gem 'bcrypt'
Run Code Online (Sandbox Code Playgroud)
进入我的用户模型我具体说:
has_secure_password
Run Code Online (Sandbox Code Playgroud)
我的数据库有一个名称字段
password_digest
Run Code Online (Sandbox Code Playgroud)
并且当运行播种器时,密码是加密的,但是当尝试从我的方法创建一个新用户时,密码是正常的,这是我创建新用户的方法
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
Run Code Online (Sandbox Code Playgroud)
谢谢 :)
您没有将密码保存为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
Run Code Online (Sandbox Code Playgroud)
因此,存储用户密码哈希的代码看起来就像这样
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
Run Code Online (Sandbox Code Playgroud)
然后你可以像文档http://api.rubyonrails.org/classes/ActiveModel/SecurePassword/ClassMethods.html那样测试它.
不要password_digest直接写属性.使用password(可能password_confirmation)代替Rails将为你做魔术.
更改
user.password_digest = data[:info][:password]
Run Code Online (Sandbox Code Playgroud)
至
user.password = data[:info][:password]
user.password_confirmation = data[:info][:password]
Run Code Online (Sandbox Code Playgroud)
我建议阅读文档has_secure_password.
| 归档时间: |
|
| 查看次数: |
10710 次 |
| 最近记录: |