Réinitialiser le mot de passe depuis la console Rails


92

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

De plus, où puis-je consulter la documentation pour couvrir plus de détails à cet égard sur la manipulation de comptes lors de l'utilisation de Devise?


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

Réponses:


139

C'est plus ou moins comme vous l'avez décrit :-)

# use mongoid
class User
  include Mongoid::Document
end


# then
user = User.where(email: 'joe@example.com').first

if user
  user.password = new_password
  user.password_confirmation = new_password
  user.save
end

Mise à jour à partir de 6 ans plus tard :)

La conception moderne permet une syntaxe plus simple, pas besoin de définir le champ de confirmation

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

Ah, hmm. Cela fonctionnerait pour un utilisateur standard, mais dans ce cas, il provient de la table admin_users. Quel est le réglage approprié à tirer de ce tableau par rapport aux utilisateurs? Le paramétrer simplement sur user = AdminUser ... n'a pas fonctionné.
ylluminate

Euh, je ne sais pas, interrogez le modèle AdminUser? Quant à moi, j'ai toujours stocké tous les utilisateurs dans les mêmes tables, avec l'attribut 'roles' assigné.
Sergio Tulentsev

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

Tentative User.store_in 'admin_users'cependant reçue undefined method. Je ne suis apparemment pas en mesure d'accéder à la table car je reçois un zéro à chaque fois. Qu'en est-il de l'interrogation de la table entière et de simplement obtenir toutes les entrées initialement pour tester pour voir si j'entre dans cette table au départ? (Travailler dans MySQL ici, mais cela ne devrait pas avoir d'importance avec ActiveRecord.)
ylluminate

: store_in fait partie de la gemme mongoïde. Vous pouvez accéder au pilote ruby ​​de bas (er) niveau en appelant User.db
Sergio Tulentsev

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

1
Le dispositif est cuit dans les rails, de sorte que l'utilisation de la confirmation pw est redondante. User.find_by_email('joe@example.com').update_attributes(:password => 'password')
copremesis

26

Si vous exécutez ce qui suit dans la console des 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
Notez que le point d'exclamation est obsolète, il est juste:User.find_by(email: 'user_email_address').reset_password('new_password','new_password')
IrishDubGuy

1
Notez également que vous devez entrer un mot de passe valide qui confirme les exigences de mot de passe dans la configuration de votre appareil.
zwippie

5

Vous pouvez simplement mettre à jour le champ du mot de passe, pas besoin de mot de passe de confirmation, le dispositif l'enregistrera sous forme cryptée

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

3

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.


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

3

1. connectez-vous à la console ralis

$ sudo bundle exec rails console production

2.Ensuite, mettez à jour le mot de passe de l'administrateur

irb(main):001:0> user = User.where("username = 'root'")
irb(main):002:0> u = user.first
irb(main):003:0> u.password="root2014@Robin"
=> "root2014@Robin"
irb(main):004:0> u.password_confirmation="root2014@Robin"
=> "root2014@Robin"
irb(main):005:0> u.save
=> true
irb(main):006:0> exit

3. Actualisez la page de connexion, utilisez le nouveau mot de passe pour vous connecter, profitez-en!

Bonne chance!


Le dispositif est intégré de sorte que l'utilisation de la confirmation pw est redondante. User.find_by_email('joe@example.com').update_attributes(:password => 'password')
copremesis

2
User.find_by_email('joe@example.com').update_attributes(:password => 'password')

0

Si votre compte est verrouillé à cause d'un trop grand nombre de tentatives de connexion, vous devrez peut-être également faire:

user.locked_at = ''
user.failed_attempts = '0'
user.save!
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.