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