【发布时间】: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));
密码重置链接如下所示:
- 问题 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