105 votes

Réinitialisation du mot de passe depuis la console Rails

Lors de l'exécution d'une application, comment sélectionner un utilisateur par son adresse e-mail, puis définir manuellement le mot de passe dans l'application ? rails console pour Devise ?

En outre, où puis-je trouver de la documentation pour obtenir plus de détails sur la manipulation des comptes à l'aide de Devise ?

0 votes

Valk : where() n'est pas disponible avant rails 3. Mais, la façon dont vous l'avez fait est très bien aussi.

164voto

Sergio Tulentsev Points 82783

La technologie moderne permet une syntaxe plus simple, il n'est pas nécessaire de définir le champ de confirmation.

user.password = new_password; user.save
# or
user.update(password: new_password)

0 votes

Ah, hmm. Cela fonctionnerait pour un utilisateur standard, mais dans ce cas, il s'agit de la table admin_users. Quelle est la modification appropriée pour tirer de cette table par rapport aux utilisateurs ? Le simple fait de définir user = AdminUser... n'a pas fonctionné.

0 votes

Umm, je ne sais pas, demander le modèle AdminUser ? Pour ma part, j'ai toujours stocké tous les utilisateurs dans les mêmes tables, avec l'attribut 'roles' assigné.

0 votes

Vous pouvez modifier le nom de la collection à laquelle le modèle fait référence avec la méthode :store_in. Ainsi, pour consulter la table admin_users, vous devez ajouter User.store_in 'admin_users' avant ce code. (cette réponse implique l'utilisation de Mongoid)

58voto

Eric Guo Points 382
# $ rails console production
u=User.where(:email => 'usermail@gmail.com').first
u.password='userpassword'
u.password_confirmation='userpassword'
u.save!

1 votes

La devise est intégrée dans les rails et l'utilisation de la confirmation du pw est redondante. User.find_by_email('joe@example.com').update_attributes(:pas‌​sword => 'password')

28voto

gstraehle Points 581

Si vous exécutez ce qui suit dans la console de rails, cela devrait faire l'affaire :

User.find_by(email: 'user_email_address').reset_password!('new_password','new_password')

http://www.rubydoc.info/github/plataformatec/devise/Devise/Models/Recoverable

6 votes

Notez que le point d'exclamation est déprécié, il est juste : User.find_by(email: 'user_email_address').reset_password('new_password','new_pas‌​sword')

1 votes

Notez également que vous devez entrer un mot de passe valide qui confirme les exigences en matière de mot de passe dans la configuration de votre appareil.

5voto

Kshitij Burman Points 31

Vous pouvez simplement mettre à jour le champ du mot de passe, sans avoir besoin du mot de passe de confirmation, devise le sauvegardera sous forme cryptée.

u = User.find_by_email('user@example.com')
u.update_attribute(:password, '123123')

3voto

valk Points 1689

Pour une raison quelconque, (Rails 2.3 ??)

user = User.where(:email => email).first

n'a pas fonctionné pour moi, mais

user = User.find_by_email('user@example.com')

l'a fait.

0 votes

La raison en est que la méthode where() ; n'était pas encore dans rails 2.3, nous avions l'habitude d'utiliser find(:all, :conditions => conditions) à l'époque.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X