我只是尝试使用控制器中的其他操作来验证令牌。
在一个操作中,我生成令牌并重定向到另一个操作。
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
操作,只需将代码放在第一个之后,验证就会成功......可能出现什么问题?
答案 0 :(得分:0)
如果您查看以下链接中提供的示例
Create a secure ASP.NET MVC 5 web app with log in, email confirmation and password reset (C#)
Account Confirmation and Password Recovery with ASP.NET Identity (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();
}