2011-04-28 4 views
1

J'essaie de migrer une application héritée vers Rails 3 et de modifier l'authentification pour utiliser Devise. J'ai créé le modèle et les migrations et importé toutes les données utilisateur. Je ne prévois pas de migrer les mots de passe car le système existant n'est pas celui que nous aimerions utiliser à l'avenir, mais je veux pouvoir présenter aux utilisateurs une expérience simple.Migration d'un modèle utilisateur existant vers Devise

Idéalement, je voudrais attraper une erreur de connexion, puis vérifier le mot de passe avec le champ existant, puis mettre à jour le mot de passe Devise avec celui-ci s'il correspond.

Je peux voir que Warden me donne un rappel qui peut intercepter les erreurs, donc je pense que je peux piéger une erreur de connexion.

Toutefois, comme tous les mots de passe (dans Devise) sont vides, j'obtiens des erreurs relatives au hachage car les champs encrypted_password sont vides.

Y at-il un moyen que je peux mettre à jour tous les comptes d'utilisateur avec un mot de passe aléatoire?

J'ai vu dans Devise :: Models :: DatabaseAuthenticatable qu'il existe une méthode 'password =' ​​mais si j'appelle ça, par ex. dans des rails console pour l'application:

User.find(1).password=('new') 
=> "new" 

Je viens d'obtenir la même chaîne de texte brut en arrière (« nouveau ») et sauvegarde de l'enregistrement de l'utilisateur après cela ne remplit pas le champ encrypted_password.

J'ai cherché autour mais je ne peux pas sembler pouvoir le trouver. Toutes les suggestions très appréciées!

+0

Je viens cernées que ce qui précède fonctionne bien - je l'ai essayé sur une autre boîte de dev qui n'avait pas complètement exécuté la migration de conception. Doh! – Iain

Répondre

1

Ok juste au cas où quelqu'un d'autre est en tissu tête comme je l'ai été dans les 24 dernières heures, voici comment vous définissez le mot de passe:

user = User.find(id) 
user.password = 'new-password' 
user.save 

Simple vraiment :)

Questions connexes