ASP.NET身份2:密码重置令牌无法正确传递

时间:2015-06-22 18:32:48

标签: asp.net-identity

当我尝试遵循提供的许多示例时,我遇到了一些问题。代码的最新迭代看起来像这样;

string passwordResetToken = await _applicationUserManager.GeneratePasswordResetTokenAsync(u.Id);
string code = callbackUrl + HttpUtility.UrlEncode(passwordResetToken);
await _applicationUserManager.SendEmailAsync(u.Id, RESET_SUBJECT, string.Format(RESET_BODY, u.FirstName, u.LastName, code));

密码重置链接如下所示:

  

http://localhost:52819/account/reset/Jn4X1sn4Ybmh9vPJmHO8U7ZdiQqr%2bRJTtn9PAMbtToILxhlUe5by0FwbX0GIY1%2bZuaHX0tAsNtcr52y1kFYPZabGwFE%2ftWvfvttKH1trLkbekhxwAZm0UbrAyZHtZyx1q3HbjFwB5lxEvfpzlvdFx9%2bByE5Nr3eehpyvyeqshhiKkr1xvPb4Oc%2bStjDFBj2qX4Qwe7dHayx8n27GaiRdNA%3d%3d

  • 问题1:如果我只是尝试使用密码重置令牌'原样'我因为'+'符号而出现路由错误(这显然会创建一个'双转义序列',IIS中默认不允许......看起来很有道理。)
  • 问题2:如果我URLEncode(passwordResetToken)结果“代码”看起来不错,但当我将其放入电子邮件并单击该链接时,它会被URL解码并发生同样的错误...
  • 问题3:即使我启用了双重转义(在web.config中),生成的URL也会被解析,以至于它不会被正确地路由回帐户控制器。

我没有发现任何人抱怨这个,所以我觉得我错过了一些愚蠢的东西......但我找不到它..

1 个答案:

答案 0 :(得分:1)

您可以尝试使用常规查询字符串参数,而不是使用uri参数定义自定义路由。

var url = "account/reset?token=" + HttpUtilityUrlEncode(token);