Как зашифровать пароль с помощью has_secure_password в Rails 4.2
У меня есть API, и я установил следующий драгоценный камень
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
Спасибо:)
2 ответа
Не пишите password_digest
приписывать напрямую. использование password
(и, вероятно, password_confirmation
) а Rails сделает магию за вас.
+ Изменить
user.password_digest = data[:info][:password]
в
user.password = data[:info][:password]
user.password_confirmation = data[:info][:password]
Советую почитать документы дляhas_secure_password
,
Вы не сохраняете пароль как хеш 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