无法在其他操作中验证电子邮件令牌

时间:2016-01-24 20:43:40

标签: asp.net asp.net-mvc-5 asp.net-identity

我只是尝试使用控制器中的其他操作来验证令牌。

在一个操作中,我生成令牌并重定向到另一个操作。

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操作,只需将代码放在第一个之后,验证就会成功......可能出现什么问题?

1 个答案:

答案 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();
}