我只是尝试使用控制器中的另一个操作来验证令牌。
在一个操作中,我生成令牌并重定向到另一个操作。
string token = await userManager.GenerateEmailConfirmationTokenAsync(user.Id);
string userId = HttpUtility.UrlEncode(user.Id);
string emailToken = HttpUtility.UrlEncode(token);
return RedirectToAction("TestToken", new { userId = userId, emailToken = emailToken });
在TestToken
操作中,我解码属性并尝试确认它,但result
始终为 false,错误Invalid token.
string decodedUserId = HttpUtility.UrlDecode(userId);
string decodedToken = HttpUtility.UrlDecode(emailToken);
IdentityResult result = await userManager.ConfirmEmailAsync(decodedUserId, decodedToken);
如果我没有重定向到TestToken
操作,而只是将代码放在第一个操作之后,则验证成功...可能出了什么问题?
如果您查看以下链接中提供的示例
创建具有登录、电子邮件确认和密码重置功能的安全 ASP.NET MVC 5 Web 应用 (C#)
使用 ASP.NET 标识进行帐户确认和密码恢复 (C#)
您将看到它们不编码
string token = await userManager.GenerateEmailConfirmationTokenAsync(user.Id);
return RedirectToAction("TestToken", new { userId = user.Id, emailToken = token });
或解码用户 ID 或令牌。
public async Task<ActionResult> TestToken(string userId, string emailToken ) {
//... Code removed for brevity
IdentityResult result = await userManager.ConfirmEmailAsync(userId, emailToken );
//... Code removed for brevity
return View();
}