2

Rails コンソールからユーザー (admin) のパスワードを設定しようとしています:

bundle exec rails console
> Spree::User.first.email
=> "admin@mysite.com"
> 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 クライアントで新しいパスワードを使用してログインしようとすると、ID/パスワードが無効であるというメッセージが表示されて失敗します。でパスワードを更新しようとしましSpree::User.first.reset_password!('spree123', 'spree123')たが、サインインできません。

Rails 3.2.12 スプリー 1.3.2

私は何が間違っているのですか?新しいパスワードを正しく設定するには?

ありがとう。

4

2 に答える 2

13

問題は、実行するたびSpree::User.firstにデータベースからレコードをリロードしていることです。これは、レコードの 1 つのインスタンスに値を設定し、それを再読み込みしてから、実際には変更されていない再読み込みされたモデルを保存していることを意味します。これを回避する簡単な方法は、レコードを含むローカル インスタンス変数を作成し、代わりにそれを更新することです。

user = Spree::User.first
user.password='spree123'
user.password_confirmation='spree123'
user.save!
于 2013-02-20T01:30:48.333 に答える