Devise password reset from Rails console

76,310

Solution 1

Modern devise allows simpler syntax, no need to set the confirmation field

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

Solution 2

# $ rails console production
u=User.where(:email => '[email protected]').first
u.password='userpassword'
u.password_confirmation='userpassword'
u.save!

Solution 3

If you run the following in the rails console it should do the trick:

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

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

Solution 4

You can simply update password field, no need for confirmation password, devise will save it in encrypted form

u = User.find_by_email('[email protected]')
u.update_attribute(:password, '123123')

Solution 5

For some reason, (Rails 2.3??)

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

didn't work for me, but

user = User.find_by_email('[email protected]')

did it.

Share:
76,310

Related videos on Youtube

ylluminate
Author by

ylluminate

Updated on November 23, 2020

Comments

  • ylluminate
    ylluminate over 3 years

    While running an app how do you select a user by email address and then set the password manually within rails console for Devise?

    Also, where would I go to review documentation to cover more details in this regard to manipulation of accounts while using Devise?

    • hellion
      hellion over 11 years
      Valk: where() isn't available until rails 3. But, the way you did it is fine too.
  • ylluminate
    ylluminate over 12 years
    Ah, hmm. That would work for a standard user, but in this case it's from the admin_users table. What's the appropriate tweak to pull from this table vs the users? Simply setting it to user = AdminUser... did not work.
  • Sergio Tulentsev
    Sergio Tulentsev over 12 years
    Umm, I don't know, query AdminUser model? As for me, I always stored all users in the same tables, with 'roles' attribute assigned.
  • Sergio Tulentsev
    Sergio Tulentsev over 12 years
    You can change name of collection that model refers to with :store_in method. So, to look in admin_users table you'd have to add User.store_in 'admin_users' before that code. (this answer implies using of Mongoid)
  • ylluminate
    ylluminate over 12 years
    Attempted User.store_in 'admin_users' however received undefined method. I'm not seemingly able to access the table as I'm just getting a nil back each time. What about querying the entire table and just getting all entries therein initially to test to see if I'm getting into that table initially? (Working in MySQL here, however that shouldn't matter with ActiveRecord.)
  • Sergio Tulentsev
    Sergio Tulentsev over 12 years
    :store_in is a part of Mongoid gem. You can get access to low(er)-level ruby driver by calling User.db
  • ylluminate
    ylluminate over 12 years
    Okay, thanks. I managed to get that working with some fiddling and exploring of the table first. Interestingly the real problem was not the password, but rather the status of the entry. I was using PostgreSQL initially, but recently switched to MySQL and the "status" attribute was throwing the error! PGSQL stores it as t for true whereas MySQL stores it as 1 (or 0 for false). When copying over the db this evoked a problem and did not convert the t -> 1. LOL, thanks.
  • dennis
    dennis over 11 years
    The reason for this being that the where(); method was not yet in rails 2.3, we used to use the find(:all, :conditions => conditions) back in the days.
  • IrishDubGuy
    IrishDubGuy over 7 years
    Note the exclamation mark is deprecated, it is just : User.find_by(email: 'user_email_address').reset_password('new_password','new_pas‌​sword')
  • copremesis
    copremesis almost 7 years
    devise is baked in rails so the use of pw confirmation is redundant. User.find_by_email('[email protected]').update_attributes(:pas‌​sword => 'password')
  • copremesis
    copremesis almost 7 years
    devise is baked in so the use of pw confirmation is redundant. User.find_by_email('[email protected]').update_attributes(:pas‌​sword => 'password')
  • copremesis
    copremesis almost 7 years
    devise is baked in so the use of pw confirmation is redundant. User.find_by_email('[email protected]').update_attributes(:pas‌​sword => 'password')
  • Sergio Tulentsev
    Sergio Tulentsev almost 7 years
    @copremesis: maybe it works now, but it certainly didn't work like this 6 years ago :)
  • zwippie
    zwippie about 6 years
    Also note that you have to enter a valid password that confirms to the password requirements in your devise configuration.
  • Masa Sakano
    Masa Sakano over 3 years
    Another few years later in 2020, Rails 6.0 issues a warning update_attributes is deprecated and will be removed from Rails 6.1. Use instead: user.update(password: new_password)