【问题标题】:ASP.NET Identity 2: Password Reset Token will not pass correctlyASP.NET Identity 2:密码重置令牌将无法正确传递
【发布时间】:2015-06-23 09:54:02
【问题描述】:

当我尝试遵循提供的许多示例时,我遇到了几个问题。代码的最新迭代是这样的;

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 也会以无法正确路由回帐户控制器的方式进行解析。

我没有找到其他人抱怨这个,所以我想我错过了一些愚蠢的东西......但我找不到它......

【问题讨论】:

  • 在没有UrlEncode() 的情况下,account/reset?token=Jn4X1.... 可以代替account/reset/Jn4X1.... 工作吗?
  • 好主意,但不幸的是,没有...尝试了使用和不使用 urlEncode 都没有成功。
  • 更正:在意识到我使用 ...?id=.... 稍微破坏了 RouteConfig 的语法后,仅使用 UrlEncode (斜线似乎是问题的根源。)
  • @Jasen,如果您想将您的评论转换为答案,我很乐意给予您适当的信任。
  • 你并不孤单。我只是尝试将令牌重构为 URL 而不是查询字符串。斜线确实是问题的根源。坚持使用查询字符串。

标签: asp.net-identity


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-03
    • 2015-04-28
    • 2020-12-15
    • 2021-01-23
    • 2017-01-29
    • 2015-05-29
    • 2013-10-31
    相关资源
    最近更新 更多