从Rails控制台生成Devise密码重置

116

在运行应用程序时,如何通过电子邮件地址选择用户并在rails console中手动设置密码,并且我要在哪里查看有关Devise账户操作的更多详细文档?


Valk:where() 直到 Rails 3 才可用。但是,你现在的做法也很好。 - hellion
8个回答

183

现代设备允许更简单的语法,无需设置确认字段

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

嗯,我不知道,查询AdminUser模型?至于我,我总是将所有用户存储在同一张表中,并分配'roles'属性。 - Sergio Tulentsev
好的,谢谢。我通过一些摆弄和首先探索表格来解决了这个问题。有趣的是,真正的问题不是密码,而是条目的状态。我最初使用的是PostgreSQL,但最近切换到MySQL,"status"属性引发了错误!PGSQL将其存储为t表示true,而MySQL将其存储为1(或0表示false)。在复制数据库时,这会引发问题,并且无法将t转换为1。哈哈,谢谢。 - ylluminate
Devise已经内置了,因此使用密码确认是多余的。User.find_by_email('joe@example.com').update_attributes(:password => 'password') - copremesis
@copremesis:也许现在可以,但六年前肯定不是这样的 :) - Sergio Tulentsev
1
又过了几年,到了2020年,Rails 6.0发布警告:update_attributes已被弃用,并将在Rails 6.1中删除。请改用以下方式:user.update(password: new_password) - Masa Sakano
显示剩余4条评论

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

4
Devise已经内置在Rails中,因此使用密码确认是多余的。 User.find_by_email('joe@example.com').update_attributes(:password => 'password') - copremesis

30

7
请注意,感叹号已被弃用,仅需使用以下代码: User.find_by(email: 'user_email_address').reset_password('new_password','new_password')。该代码的作用是根据电子邮件地址查找用户,并将其密码重置为新密码。 - IrishDubGuy
1
请注意,您必须输入有效的密码,符合您设备配置中的密码要求。 - zwippie

7
您可以直接更新密码字段,无需确认密码,devise会以加密形式保存它。
u = User.find_by_email('user@example.com')
u.update_attribute(:password, '123123')

3

由于某些原因,(Rails 2.3??)

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

对我没有用,但是

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

完成了。


这是因为在Rails 2.3版本中还没有where()方法,我们过去常常使用find(:all, :conditions => conditions)来实现相同的功能。 - dennis

3

1. 登录到 ralis 控制台

$ sudo bundle exec rails console production

2.然后更新管理员密码

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. 刷新登录页面,使用新密码登录,尽情享受!

祝你好运!


Devise已经内置了,因此使用密码确认是多余的。User.find_by_email('joe@example.com').update_attributes(:password => 'password') - copremesis

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

1

如果您的帐户因过多登录尝试而被锁定,您可能还需要执行以下操作:

user.locked_at = ''
user.failed_attempts = '0'
user.save!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接