2017-11-09 20 views
0

私はAsp.Net-Identity-2を使用しており、確認メールの流れを作成しました。Asp.NET - ID 2 - 無効なトークンエラー - Php

すべては私のローカル環境ではうまくいきますが、私のサーバーにコードを配備し、私のサーバー上で(自分のローカルで働いている)同じシナリオをテストすると、「無効なトークン」と表示されます。

シナリオ

  • 変更メール
  • リンク "のメールを確認し、" 無効なトークン」と言ってポップアップ表示
  • メッセージをWebページにリダイレクト
  • に電子メールに
  • クリックを受け取ります

私はすでにquestionにある可能性のある間違いをすべてチェックしています。私はすべてのことが正しいので、私の地域では完璧に動作しています。サーバーで何かをする必要があります。私はサーバーの日付が影響を受けるかもしれないと思ったが、私はデータベースサーバーとWebサーバーの日付を同期させたが、まだ失敗している。

私は、GenerateEmailConfirmationTokenAsyncを使用してトークンを生成し、ConfirmEmailAsyncを使用してトークンを確認しています。私は実際にこのメソッドを実行しているので、私はそれを確かめることができます(何が起こったのかわからないときは、すべてのことを確実にする必要がありますか?)

私はすでにURLをエンコード/トークンが破損することはありません。ログを保存してサーバーにコードを実行し、数回チェックしたので、これは確信しています。それは

TokenLifeSpanは8日であることではありませんので、

ユーザーは、データベース内のセキュリティスタンプを持っています。そうではありません。

私もコードトークン

ApplicationUserManager.ConfirmEmailAsync(subject, token); 
を確認するためにトークン

ApplicationUserManager.GenerateEmailConfirmationTokenAsync(userId); 

コードを生成するUserValidatorに偽AllowOnlyAlphanumericUserNamesプロパティ=を試してみましたが、でもUniqueEmail = falseを

userManager.UserValidator = new UserValidator<User>(userManager) { AllowOnlyAlphanumericUserNames = false, UniqueEmail = false }; 

アイデア?

更新

それは、すべてのクライアントとローカルではなく、PHPクライアントとPHPクライアントは、したがって、問題をセキュリティスタンプを変更した余分な作業をしていたとサーバー/に取り組んでいました。

サーバー上の唯一のクライアントがPhpになっていたので、サーバーに問題があり、ローカル環境で何か問題があると考えました。私のローカルとデバッグに環境全体(PHPクライアントで)をインストールした後、私は問題を発見しました。以下の答えをお読みください。

+0

トークン/生成トークンを確認するコードを共有できますか? –

+0

確かに、私はそれを投稿します。コードはそれと同じくらい簡単です。私が言ったように、それはローカルで(すべての開発者のために)作業しているので、私はコードだとは思わない –

答えて

0

まあ、エラーは、トークン生成後に実行されていたコードが原因です。このコードは、データベース内のユーザーのSecurityStampを変更していました。

Asp.Net Identity 2は、セキュリティ・スタンプを使用してトークンを生成および検証し、トークンの生成後に変更されたため、トークンは常に無効です。

ありがとうございます!

関連する問題