从Rails控制台设计密码重置


92

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

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


Valk:where()在rails 3之前不可用。但是,您做的方式也很好。
hellion 2012年

Answers:


138

或多或少像您描述的那样:-)

# 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

从6年后开始更新:)

现代设计可简化语法,无需设置确认字段

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

嗯,嗯。这对于标准用户将有效,但是在这种情况下,它来自admin_users表。与用户相比,该表有何适当的调整方法?简单地将其设置为user = AdminUser ...无效。
ylluminate 2011年

嗯,我不知道,查询AdminUser模型吗?对于我而言,我始终将所有用户存储在同一表中,并分配了“角色”属性。
塞尔吉奥·图伦采夫2011年

您可以使用:store_in方法更改模型引用的集合名称。因此,要查看admin_users表,您必须在该代码之前添加User.store_in'admin_users'。(此答案暗示使用Mongoid)
Sergio Tulentsev 2011年

尝试User.store_in 'admin_users'但是收到undefined method。我似乎无法访问该表,因为每次都返回零。如何查询整个表并只是最初获取其中的所有条目以进行测试以查看我是否最初进入该表呢?(在这里使用MySQL,但是与ActiveRecord无关紧要。)
ylluminate 2011年

:store_in是Mongoid宝石的一部分。您可以通过致电User.db
Sergio Tulentsev'Nov

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

1
devise是在轨道上烘焙的,因此使用pw确认是多余的。User.find_by_email('joe@example.com').update_attributes(:password => 'password')
copremesis '17

26

如果您在rails控制台中运行以下命令,则应达到以下目的:

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

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


6
请注意,不建议使用感叹号,它只是:User.find_by(email: 'user_email_address').reset_password('new_password','new_password')
IrishDubGuy

1
另请注意,您必须输入有效的密码,以确认设计配置中的密码要求。
zwippie

5

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

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')

做到了。


原因是where(); 方法尚未在Rails 2.3中使用,我们过去常常使用find(:all,:conditions => conditions)。
丹尼斯

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

祝好运!


设计已经完成,因此使用pw确认是多余的。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

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

user.locked_at = ''
user.failed_attempts = '0'
user.save!
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.