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.
Related videos on Youtube
Author by
ylluminate
Updated on November 23, 2020Comments
-
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 over 11 yearsValk: where() isn't available until rails 3. But, the way you did it is fine too.
-
-
ylluminate over 12 yearsAh, 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 over 12 yearsUmm, 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 over 12 yearsYou 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 over 12 yearsAttempted
User.store_in 'admin_users'
however receivedundefined 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 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 over 12 yearsOkay, 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 over 11 yearsThe 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 over 7 yearsNote the exclamation mark is deprecated, it is just :
User.find_by(email: 'user_email_address').reset_password('new_password','new_password')
-
copremesis almost 7 yearsdevise is baked in rails so the use of pw confirmation is redundant.
User.find_by_email('[email protected]').update_attributes(:password => 'password')
-
copremesis almost 7 yearsdevise is baked in so the use of pw confirmation is redundant.
User.find_by_email('[email protected]').update_attributes(:password => 'password')
-
copremesis almost 7 yearsdevise is baked in so the use of pw confirmation is redundant.
User.find_by_email('[email protected]').update_attributes(:password => 'password')
-
Sergio Tulentsev almost 7 years@copremesis: maybe it works now, but it certainly didn't work like this 6 years ago :)
-
zwippie about 6 yearsAlso note that you have to enter a valid password that confirms to the password requirements in your devise configuration.
-
Masa Sakano over 3 yearsAnother 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)