24

VS 2013 テンプレートからコードをコピーして、MVC アプリケーションに ASP.NET Identity を実装しました。基本的なことは機能していますが、パスワードのリセットが機能しませんでした。「パスワードを忘れた」ページを表示すると、トークンを含む電子メールが生成されます。このトークンは、次のメソッドによって返されます。

UserManager.GeneratePasswordResetTokenAsync(user.Id)

リンクをクリックすると、パスワードのリセット フォームが開き、ユーザーはメール アドレスと新しいパスワードを入力できます。次に、パスワード変更機能への呼び出しが行われます。

UserManager.ResetPasswordAsync(user.Id, model.Code, model.Password);

これは私には良さそうに見えますが、結果は常に「無効なトークン」であり、その理由がわかりません。

なぜそれが機能しないのか、誰にも分かりますか?そして、トークンはどこに保存されていますか?AspNetUsersテーブルのどこかのデータベースにあるに違いないと思いました...

4

5 に答える 5

34

HTML エンコーディング/デコーディング以外で最も一般的な問題は、データベース内のユーザー エントリに SecurityStamp がない可能性があることです。ASP.NET Identity にはバグがあり、トークンの作成時に 1 つの関数がそれを null に設定し、トークンの検証時に別の関数が空の文字列をチェックします。

SecurityStamp が null または空の文字列の場合、無効なトークンの問題が発生します。

于 2015-06-10T16:51:56.210 に答える
0

私の場合、これはデータベース内のデータが別のデータベースから正しくインポートされなかったためです。SecurityStampフィールドが null だったので、無効なトークン エラーが発生しました。

于 2016-10-24T07:46:40.227 に答える