Rails > Concevoir cryptage de mot de passe
Je suis en train de mettre en œuvre une méthode pour permettre à un mot de passe à changé à partir d'un autre service en dehors de concevoir, de toute façon.
# Profile password change
def change_password(oldpass, newpass)
pepper = nil
cost = 10
# Encrypt plain text passwords
encrypt_old = ::BCrypt::Password.create("#{oldpass}#{pepper}", :cost => cost).to_s
# Validate old
if self.encrypted_password == encrypt_old
encrypt_new = ::BCrypt::Password.create("#{newpass}#{pepper}", :cost => cost).to_s
self.encrypted_password = encrypt_new
self.save
else
Logger.new("Wrong old password!")
end
end
Il semble que je suis le cryptage de mot de passe erroné oldpass contient un texte brut de l'ancien mot de passe j'ai besoin de hachage de voir si elle correspond au mot de passe actuel puis permettre le nouveau mot de passe sera stocké. Mais tout ce que j'obtiens est un mauvais mot de passe.
Retravaillé:
def change_password(oldpass, newpass)
if valid_password?(oldpass)
password = newpass
save
return true
else
return false
end
end
Si vous êtes à l'aide de Concevoir, alors vous n'avez pas besoin de gérer le chiffrement de vous-même. Concevoir utilise bycrypt par défaut: github.com/plataformatec/devise/blob/master/lib/generators/...
OriginalL'auteur Sterling Duchess | 2013-03-26
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas besoin de crypter le mot de passe vous-même, si vous êtes dans l'application ou dans la console Rails.
Juste mettre à jour l'utilisateur de la manière suivante et de Concevoir prendra soin de lui-même.
Concevoir ensuite crypter le mot de passe et de les stocker. Vous avez juste besoin de s'assurer que
user.password_confirmation
estnil
. Sipassword_confirmation
est rien d'autre, il sera en correspondance avecpassword
.MODIFIER
Vous pouvez vérifier le mot de passe existant avec:
user.valid_password?(old_password)
OK, j'ai mis à jour ma réponse avec vérifier si le mot de passe est correct.
Regarde mon premier post, j'ai ajouté de la mise à jour de la méthode. Même tho méthode retourne vrai il ne fait pas changer le mot de passe.
Désolé j'avais oublié j'ai besoin de dire de soi.save etc. Merci s'accoupler.
OriginalL'auteur Tomáš Dundáček
À Concevoir, vous n'avez pas besoin de poignée à l'aide de bcrypt vous-même. Par défaut, il traite ce et le changement de mot de passe de la méthode. Vous pouvez rechercher à la source ici ou tout simplement regarder dans
config/intitalizers/devise.rb
dans votre application Rails.Aussi, si vous utilisez le
#update_with_password
méthode prévue par l'Concevoir, alors vous pouvez passer à un hachage comme ceci:Ou vous pouvez omettre
:password_confirmation
si vous ne voulez pas que l'utilisateur de fournir une confirmation.EDIT: j'ai utilisé le mauvais champ; elle doit avoir été "current_password' au lieu de 'old_password'.
Voici la méthode en question dans la source pour Concevoir:
Vue sur GitHub
masse assigner une erreur est levée, car les champs ne sont pas accessibles – le modèle doit avoir
attr_accessible :old_password
. Je me demande cependant, estold_password
un champ qui est écrit dans la base de données?La masse attribuer erreur ne devrait pas se produire, c'est parce qu'elle doit avoir été
current_password
. Cela indiquera à Concevoir pour valider l'ancien mot de passe, puis apportez les modifications en une seule ligne de code.OriginalL'auteur joshhepworth