2016-02-13 33 views
0

我有一個API加密與密碼has_secure_password和我裝下一個寶石如何在Rails的4.2

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 

謝謝:)

回答

4

方法不寫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

+0

謝謝爲你的答案,它的作品:3 – Rul

3

您不是將密碼保存爲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可對其進行測試

+1

感謝您的回答:) – Rul