2013-02-19 124 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')