3

問題は、ユーザーが(電子メールから)パスワードをリセットするためにリンクをクリックしたとき、および(フォームで)リセットしようとしたときに、デバイスがreset_password_sent_atをチェックしていることです。エラーが発生します。

Reset password token has expired, please request a new one

つまり、「reset_password_tokenが生成されると、@ user.reset_password_sent_atをTime.nowに設定する必要があります。そうでない場合、deviseが@ user.reset_password_period_valid?を実行して、リセットトークンがまだ有効かどうかを確認すると、nilになり、トークンの有効期限が切れました。」

私が理解していないのは、reset_password_sent_atをTime.nowに割り当てる方法と場所です。

コンソールからすべてのユーザーにTime.nowを割り当てる必要がありますか?もしそうなら、私はそれをどのように行いますか?

または、Time.nowをreset_password_sent_atに割り当てる必要があるのはbefore_create(または他の何か)ですか?もしそうなら、私はこれをどのようにそしてどこで行うべきですか?

4

1 に答える 1

12

心配する必要はありませんreset_password_sent_at。これはdevise、reset_password がユーザーに送信されたときに正しく設定されるようにするものです。

reset_password_sent_atreset_password_withinファイルに設定されたパラメーターと連動しconfig/initializers/devise.rbます。次のようになります。

config.reset_password_within = 2.hours

ほとんどの場合、nilまたはに設定されており、それがアプリケーションにメソッド0をスローさせています。password reset token has expired

于 2012-10-26T12:20:43.013 に答える