2013-03-18 5 views
1

Mon site est connecté au forum vbulletin externe. J'ai validateur utilisateur personnalisé pour vérifier si le nom d'utilisateur, e-mail est présent sur le forum vbulletin.Exécution de la validation mot de passe/mot de passe confirmation lorsque l'utilisateur réinitialise le mot de passe

validate :check_if_forum_user_exists 

def check_if_forum_user_exists 
    if Vbuser.find_by_email(email.downcase) 
    errors.add(:email, "error 1") 
    end 

    if !Vbuser.find(:all, conditions: ["lower(username) = lower(?)",name]).empty? 
    errors.add(:name, "error 2") 
    end 
end 

J'ai une fonctionnalité de réinitialisation de mot de passe très basique. À la fin, l'utilisateur entre le mot de passe et la confirmation de mot de passe qui est stockée dans params[:user]. Dans le contrôleur, je veux l'enregistrer avec @user.update_attributes(params[:user]) et obtenir la validation 'erreur 1' (comme tous les utilisateurs existants ont des comptes vbulletin, il se déclenchera toujours).

Je voudrais exécuter uniquement les validateurs has_secure_password, et pas d'autres, car je ne change rien d'autre que le mot de passe. Une idée comment puis-je faire cela? Et pourquoi ce validateur personnalisé se déclenche.

Répondre

1

Vous pouvez utiliser changed, changed_attributes et _changed? détecter quels champs ont changé à la mise à jour.

Pour inspectent si l'adresse e-mail a changé, vous pouvez le faire:

if email_changed? 
    ... 
end 

mot de passe peut être un peu plus compliqué. Vous avez probablement un champ de mot de passe haché et le mot de passe et la confirmation de mot de passe ne sont pas des champs réels sur votre modèle. Vous pouvez faire quelque chose de similaire pour voir si le mot de passe hashed a changé.

Questions connexes