私は知っていますが、この質問は何度も尋ねられていますが、私の問題は少し異なります。ASP.NET ID 2電子メールの確認無効なトークン
私はGenerateEmailConfirmationTokenAsync
とConfirmEmailAsync
メソッドで奇妙な問題が発生しています。
メールを送信する前に、正しくHttpUtility.UrlEncode
とHttpUtility.UrlDecode
の方法を使用しています。
奇妙なことは、ユーザーの作成中とメールを受け取った後で、エラーを再現できないことです。確認してください。しかし、同じ環境では、サインアップした10人のユーザーのうち3人が、無効なトークンの問題を報告しています。
私はもう少し調べましたが、IISが再起動されたり、公開された後に変更される可能性のあるマシンキーが原因で発生する可能性があります。だから同じものに取り組むために、マシンキーを生成してweb.configに保存しましたが、それでも問題はそこにあるようです。
私はAzure App Serviceでこれを主催しています。
他に何が間違っているのでしょうか?
UPDATE:私はあなたのためにここのコードを追加している人は
string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
var callbackUrl = new Uri(string.Format("{0}?userId={1}&code={2}", ConfigurationManager.AppSettings["EmailConfirmationURL"], user.Id, HttpUtility.UrlEncode(code)));
string emailTemplate = MailTemplates.UserRegistrationEmailTemplate(FirstName, CompanyName, callbackUrl);
await CustomEmail.SendEmail(new List<string> { user.Email }, "Confirm your account", emailTemplate);
を検討し、
IdentityResult result = await UserManager.ConfirmEmailAsync(userId, HttpUtility.UrlDecode(code));
ユーザーがトークンを送信するのに時間がかかりすぎると、送信前にトークンが期限切れになっている可能性があります。トークンは無効にされる前に使用されなければならない寿命があります。 – Nkosi
トークンを正しくエンコードしていると確信しています。あなたがしたことを示してください。コード上のいくつかの目が問題を見つける可能性があります。 – Nkosi
あなたはこれを見たことがありますか:http://tech.trailmax。info/2015/05/asp-net-identity-invalid-token-for-password-reset-or-email-confirmation /ユーザーのセキュリティスタンプについて言及していない - その理由が考えられます。 – trailmax