ASP.NET标识2:密码重置令牌将无法正确传递



当我试图遵循提供的许多示例时,我遇到了几个问题。代码的最新迭代如下所示;

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),结果"代码"看起来不错,但当我把它放进电子邮件并点击链接时,它会被URLdecoded,并发生同样的错误
  • 问题3:即使我启用了双转义(在web.config中),生成的URL也会被解析为无法正确路由回帐户控制器

我没有发现其他人抱怨这件事,所以我想我错过了一些愚蠢的事情。。。但是我找不到。

与其用uri参数定义自定义路由,不如只使用常规查询字符串参数。

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

相关内容

  • 没有找到相关文章

最新更新