2016-12-18 4 views
0

ユーザーが受け取った電子メールの[Confirm Email]リンクをクリックすると、URLはユーザーをAccount ControllerのConfirmEmailAsyncメソッドに誘導します。 このメソッドは、呼び出しの結果を電子メールトークンプロバイダに返します。Aspnet Core 1.0 IDユーザーマネージャConfirmEmailAsyncはInvalidTokenを返します

var result = await _userManager.ConfirmEmailAsync(user, code); 

ユーザーが登録したときに、生成された電子メールトークンと、上記のコード変数に渡されたトークンが同一であることを取得しました。

私はこれがasp-net-core-identity-token-providersによって自動的に行われているとは思いますが、Base64のエンコードとデコードは成功しませんでした。

アイデア?

答えて

1

身元確認によって生成されたトークンは、ユーザーのSecurityStampに関連付けられます。スタンプが何らかの理由で更新された場合、以前に送信されたトークンはすべて無効になります。パスワードを変更または設定すると、これが発生します。

これは操作上の問題の可能性があります。彼らが提供した電子メールを検証するために電子メールを送信した後、偶然登録パスワードを保存しますか?例えば

、これは失敗します。

  • をパスワード
  • のようなレジスタ情報がトークンを使用してみてください
  • トークン保存してメールを送信します。

代わりに、この作業をする必要があります:

  • 保存レジスタ情報
  • そのシナリオは、私のように単なる一例であるトークン

を使用してみてくださいトークン

  • メールを送信あなたのコードがセットアップされていることを確認することはできません。つまり、トークンが同じであれば、セキュリティー・スタンプが問題になる可能性があります。プロセス全体を通してデータベースにその情報を記録し、何か更新しているかどうかを確認してください。

  • +0

    登録時に、ユーザーをdbに保存しています。これが成功すると、電子メールと電子メールトークンが作成されます。その後、電子メールが送信されます。ユーザーに対しては他のアクションは実行されません。 – Greg

    +0

    実際、あなたは100%正しいです。電子メールを送信した後、セキュリティスタンプを変更していたユーザーにロールを追加していました。私はこれを修正し、今はすべてが期待どおりに機能しています。どうもありがとう!! – Greg

    +0

    @Gregお手伝いします。 :) –

    関連する問題