2016-03-24 15 views
0

は、私の(カスタム)メーラは、この行があります:Rails + Devise "パスワードトークンのリセットが無効です" - トークンがdbトークンと一致しています...?パスワードをリセットしようと

edit_user_password_url(@user, reset_password_token: @user.reset_password_token) 

をそして、それは、このようなリンクを作成します。

http://fixit-rails.dev//users/password/edit.6?reset_password_token=13f76244d39b0dfb9746674058a45559280358b99c1fdc36c6b9af2de2ba6376 

、ユーザーが次のreset_password_tokenを持つデータベース内の:

13f76244d39b0dfb9746674058a45559280358b99c1fdc36c6b9af2de2ba6376 

ユーザーは新しいパスワード画面に正常に移動できますが、[送信]をクリックするとエラーメッセージはと表示されます

なぜ、deviseはトークンを認識しませんか?

UPDATE

私は次のコードでトークンを作成します。

def generate_reset_password_token 
    raw, enc = Devise.token_generator.generate(User, :reset_password_token) 
    self.reset_password_token = enc 
    self.reset_password_sent_at = Time.now.utc 
    self.save(validate: false) 
end 
+0

あなたの電子メールテンプレートでは@token not @ user.reset_password_tokenにする必要があります。 'edit_user_password_url(@user、reset_password_token:@token)' –

+0

@tokenは存在しません。どうすれば作成できますか?私はカスタムメーラーであり、Deviseのものではありません。 – Mirror318

+0

コントローラでトークンを設定し、可能であればリセットパスワードの電子メールを送信するコードを共有できますか? –

答えて

0

が、私は解決策を見つけました!

edit_user_password_url(@user, reset_password_token: @user.reset_password_token) 

はなくなるはずです。

edit_user_password_url(@user, reset_password_token: @token) 

@tokenは何ですか、あなたは求めることができますか?それからrawです:工夫で

def generate_reset_password_token 
    raw, enc = Devise.token_generator.generate(User, :reset_password_token) 
    self.reset_password_token = enc 
    self.reset_password_sent_at = Time.now.utc 
    self.save(validate: false) 
end 

それが自動的に設定されていますが、あなたがあなた自身のことをやっている場合、あなたはrawを保存して、あなたのメーラーでrawから@tokenを設定する必要があります。

関連する問題