2016-12-23 7 views
0

Cucumberを使用して私のアプリケーション内でリセットパスワード機能(Devise)をテストしようとしています。私はreset passwordリンクをクリックするとメールアドレスを入力してユーザーを作成した後、私のコンソール内、私はreset_password_tokenフィールドが、私は、そのトークンを取得し、それを使用しようとする私の手順の一環としてパスワードリセットトークンRails 4とDeviseへのアクセス

I, [2016-12-23T09:35:49.937441 #2164] INFO -- : Parameters: {"utf8"=>"✓", "user"=>{"email"=>"[email protected]"}, "commit"=>"Send me reset password instructions"} 
D, [2016-12-23T09:35:49.939803 #2164] DEBUG -- : User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."email" = $1 ORDER BY "users"."id" ASC LIMIT 1 [["email", "[email protected]"]] 
D, [2016-12-23T09:35:50.122728 #2164] DEBUG -- : User Load (0.6ms) SELECT "users".* FROM "users" WHERE "users"."reset_password_token" = $1 ORDER BY "users"."id" ASC LIMIT 1 [["reset_password_token", "6e67df7cd7824cf21939a45e9cfe4a399e78216d471432b8b55d7a8cbddc800a"]] 
D, [2016-12-23T09:35:50.123615 #2164] DEBUG -- : (0.1ms) BEGIN 
D, [2016-12-23T09:35:50.125628 #2164] DEBUG -- : SQL (0.5ms) UPDATE "users" SET "reset_password_token" = $1, "reset_password_sent_at" = $2, "updated_at" = $3 WHERE "users"."id" = $4 [["reset_password_token", "6e67df7cd7824cf21939a45e9cfe4a399e78216d471432b8b55d7a8cbddc800a"], ["reset_password_sent_at", "2016-12-23 09:35:50.123253"], ["updated_at", "2016-12-23 09:35:50.123915"], ["id", 1]] 

に更新されます注意してください。私は、ユーザーのリセットをテストすることができますので、私が正しいトークン値にアクセスするにはどうすればよい

<%= link_to 'Change my password', edit_password_url(@resource, reset_password_token: @token) %> 

によって生成される

<a href="http://localhost:4000/users/password/edit?reset_password_token=ZUjy2Y3snR3u7diRoAC4">Change my password</a> 

に気づくのにリセットパスワード以内メール

Given(/^the user resets their password$/) do 
    @user = User.last 
    visit edit_user_password_path(reset_password_token: @user.reset_password_token) 
    fill_in 'user_password', with: 'NewPassword' 
    fill_in 'user_password_confirmation', with: 'NewPassword' 
    submit_form 
end 

パスワード

ありがとう

+0

を使用することができます。あなたの例によると、 'ZUjy2Y3snR3u7diRoAC4'または' 6e67df7cd7824cf21939a45e9cfe4a399e78216d471432b8b55d7a8cbddc800a'でユーザを探したいのですか? – 31piy

+0

私は何を求めているのですか?なぜ私は2つの異なる値を得ていますか?@ resource.tokenによってユーザーを見つけるにはどうすればいいですか? – Richlewis

+0

@Recklewisは私の答えをチェックしてください。 – 31piy

答えて

1

this commentを参照してください。 devise_invitableでも同様です。生のトークンをDBに格納するのは良い方法ではなく、安全でもありません。そのため、生のトークンを郵送した後、トークンは計算されたダイジェストとしてDBに格納されます。

あなたがメールであるトークンによってユーザーを見つける必要がある場合は、あなたの質問が明確ではない

User.find_by_invitation_token('your_token_here') 
+0

答えをありがとう、私は今少なくとも "理由"を理解しています。 'find_by_invitation_token'は'未定義のメソッド 'エラーを返す – Richlewis

+0

@Richlewis - それはなぜですか?それが重要な場合は、あなたのソリューションも共有してください。それは他人を助けるかもしれない。 – 31piy

関連する問題