2013-02-19 50 views
2

我试图从Rails的控制台中设置用户(管理员)密码:施普雷/ Rails的用户密码重置

bundle exec rails console 
> Spree::User.first.email 
=> "[email protected]" 
> Spree::User.first.encrypted_password 
    Spree::User Load (1.1ms) SELECT "spree_users".* FROM "spree_users" LIMIT 1 
=> "4ec556............................................." 
> Spree::User.first.password='spree123' 
    Spree::User Load (1.0ms) SELECT "spree_users".* FROM "spree_users" LIMIT 1 
=> "spree123" 
> Spree::User.first.password_confirmation='spree123' 
    Spree::User Load (1.0ms) SELECT "spree_users".* FROM "spree_users" LIMIT 1 
=> "spree123" 
> Spree::User.first.save! 
    Spree::User Load (1.0ms) SELECT "spree_users".* FROM "spree_users" LIMIT 1 
    (0.3ms) BEGIN 
    (1.3ms) SELECT COUNT(DISTINCT "spree_users"."id") FROM "spree_users" LEFT OUTER JOIN "spree_roles_users" ON "spree_roles_users"."user_id" = "spree_users"."id" LEFT OUTER JOIN "spree_roles" ON "spree_roles"."id" = "spree_roles_users"."role_id" WHERE "spree_roles"."name" = 'admin' 
    (0.3ms) COMMIT 
=> true 
> Spree::User.first.encrypted_password 
    Spree::User Load (1.0ms) SELECT "spree_users".* FROM "spree_users" LIMIT 1 
=> "1bc15d.............................................." 

到目前为止好。它看起来像用户的新密码已被更改并提交到数据库。但是,当我尝试稍后使用Web客户端登录并使用新密码时,它会失败,并显示无效的身份/密码消息。 我甚至试图与Spree::User.first.reset_password!('spree123', 'spree123')更新密码,但门槛水湿登录。

的Rails 3.2.12 施普雷1.3.2

任何想法,我究竟做错了什么?如何正确设置新密码?

谢谢。

回答

12

问题是,每次你在做Spree::User.first它都从数据库重新加载记录。这意味着您正在设置记录的一个实例上的值,重新加载它,然后保存实际上未更改的重新加载的模型。解决这个一个简单的方法是创建一个包含记录和更新,而不是本地实例变量:

user = Spree::User.first 
user.password='spree123' 
user.password_confirmation='spree123' 
user.save! 
+1

感谢您的回答。不幸的是,即使将实例分配给局部变量也没有帮助。我必须使用* rake spree_auth:admin:create *创建一个新的管理员,并使用Web管理界面进行更改。 – 2013-02-20 09:34:36

+1

适合我,谢谢 – 2014-04-22 21:31:40

0
Spree::User.first.update_attributes(password: 'password')