我知道,这个问题在 SO 中已经被问过很多次,但我的问题有点不同。
我在GenerateEmailConfirmationTokenAsync
和ConfirmEmailAsync
方法上有一个奇怪的问题。
我在发送电子邮件之前正确使用HttpUtility.UrlEncode
和方法。HttpUtility.UrlDecode
奇怪的是,在创建用户和收到邮件后,我永远无法重现任何错误,确认它。但是在相同的环境下,10 个注册用户中就有 3 个报告了 Invalid Token 的问题。
我进行了更多搜索,发现它可能是由于机器密钥而发生的,如果重新启动 IIS 或其他原因或发布后,机器密钥可能会发生变化。所以为了解决这个问题,我生成了一个机器密钥并保存在 web.config 中,但问题似乎仍然存在。
我在 Azure 应用服务中托管它。
对还有什么问题有更多想法吗?
更新:我在这里添加代码供你们查看
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));