从 Rails 控制台设计密码重置

Posted

技术标签:

【中文标题】从 Rails 控制台设计密码重置【英文标题】:Devise password reset from Rails console 【发布时间】:2012-01-08 12:53:21 【问题描述】:

在运行应用程序时,如何通过电子邮件地址选择用户,然后在 rails console 中为 Devise 手动设置密码?

另外,我应该去哪里查看文档以涵盖在使用 Devise 时操纵帐户方面的更多详细信息?

【问题讨论】:

Valk: where() 直到 rails 3 才可用。但是,你这样做的方式也很好。 【参考方案1】:

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

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

【讨论】:

啊,嗯。这适用于标准用户,但在这种情况下,它来自 admin_users 表。与用户相比,从该表中提取的适当调整是什么?简单地将其设置为 user = AdminUser... 不起作用。 嗯,我不知道,查询AdminUser模型?至于我,我总是将所有用户存储在同一个表中,并分配了“角色”属性。 您可以使用 :store_in 方法更改模型引用的集合的名称。因此,要查看 admin_users 表,您必须在该代码之前添加 User.store_in 'admin_users' 。 (这个答案意味着使用 Mongoid) 尝试了User.store_in 'admin_users',但收到了undefined method。我似乎无法访问该表,因为我每次只得到一个零。查询整个表并最初获取其中的所有条目以测试我最初是否进入该表怎么样? (这里在 mysql 中工作,但是这与 ActiveRecord 无关。) 又过了几年,也就是 2020 年,Rails 6.0 发出警告 update_attributes 已弃用,将从 Rails 6.1 中删除。改用:user.update(password: new_password)【参考方案2】:

出于某种原因,(Rails 2.3??)

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

对我没用,但是

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

做到了。

【讨论】:

原因是 where();方法在 rails 2.3 中还没有,我们过去常常使用 find(:all, :conditions => conditions)。【参考方案3】:
# $ rails console production
u=User.where(:email => 'usermail@gmail.com').first
u.password='userpassword'
u.password_confirmation='userpassword'
u.save!

【讨论】:

设计是在 Rails 中烘焙的,因此使用 pw 确认是多余的。 User.find_by_email('joe@example.com').update_attributes(:password => 'password')【参考方案4】:

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

祝你好运!

【讨论】:

设计已经加入,因此使用 pw 确认是多余的。 User.find_by_email('joe@example.com').update_attributes(:password => 'password')【参考方案5】:

如果您在 Rails 控制台中运行以下命令,它应该可以解决问题:

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

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

【讨论】:

注意感叹号已被弃用,它只是:User.find_by(email: 'user_email_address').reset_password('new_password','new_password') 另请注意,您必须输入一个有效密码,以确认您的设备配置中的密码要求。【参考方案6】:

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

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

【讨论】:

【参考方案7】:

您可以简单地更新密码字段,无需确认密码,设计将其以加密形式保存

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

【讨论】:

【参考方案8】:
User.find_by_email('joe@example.com').update_attributes(:password => 'password')

【讨论】:

以上是关于从 Rails 控制台设计密码重置的主要内容,如果未能解决你的问题,请参考以下文章

重置设计 rails 的密码会导致“没有将数组隐式转换为字符串”错误

Rails 4 + 设计:密码重置总是在生产服务器上给出“令牌无效”错误,但在本地工作正常。

Rails 密码重置记录未找到

使用设计重置密码问题

使用设计发送重置密码说明

gitlab重置用户密码