当前位置: 首页 > 知识库问答 >
问题:

ASP。NET token错误重置密码

颛孙玉石
2023-03-14

我只是在我的项目中添加了MVC 5的“忘记密码”部分,在收到邮件后我无法更改密码。

错误:在应用程序中=

在Visual Studio中=

错误来源代码:

 public async Task<ActionResult> ResetPassword(ResetPasswordViewModel model)
    {
        if (!ModelState.IsValid)
        {
            return View(model);
        }
        var user = await UserManager.FindByEmailAsync(model.Email);
        if (user == null)
        {
            // Don't reveal that the user does not exist
            return RedirectToAction("ResetPasswordConfirmation", "Account");
        }
        var code = model.Code.Replace(" ","+");
        **var result = await UserManager.ResetPasswordAsync(user.Id, model.Code, model.Password);**
        if (result.Succeeded)
        {
            return RedirectToAction("ResetPasswordConfirmation", "Account");
        }
        AddErrors(result);
        return View();
    }

我在stackoverflow和其他方面尝试了很多东西,但都没有成功。

如果你知道我为什么会出现这个错误:)

我使用在创建ASP时提出的基本模板。NET web app。我可以上传你想要的所有代码文件,只要问你需要什么帮助我,我会在2分钟内上传!

谢谢

共有3个答案

长孙作人
2023-03-14

我发现了问题所在,

我的Call backUrl具有带有令牌特殊字符和大写的格式

首先在ForgotPasswordViewModel中,我手动生成URL,然后对其进行正确编码

            string code = await UserManager.GeneratePasswordResetTokenAsync(user.Id);
            code = System.Web.HttpUtility.UrlEncode(code);
            string datcode = code;
            //var callbackUrl = Url.Action("ResetPassword", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
            var datUrl = "http://localhost:62989/Account/Resetpassword?" + user.Id + "&Code=" + code;

对于大写问题,我在将callbackurl分配给emai消息时忘记了ToTitleCase方法,所以我删除了它。

            message = message.Replace("@ViewBag.Name", CultureInfo.CurrentCulture.TextInfo.ToTitleCase(usernom));
            message = message.Replace("@ViewBag.CallBackUrl", datUrl);
            await MessageServices.SendEmailAsync(model.Email, emailSubject, message);

其次,我重置PasswordViewModel,用

var code = WebUtility.UrlDecode(model.Code);

用原来的空白处代替,

code = code.Replace(' ', '+');

最后,它在ResetPasswordAsync函数中工作得很好!

var result = await UserManager.ResetPasswordAsync(user.Id, code, model.Password);

谢谢拉维的帮助

祁聪
2023-03-14

假设您使用的是默认模板,您可能会使用下面的代码来生成callbackUrl

string code = await UserManager.GeneratePasswordResetTokenAsync(user.Id);
var callbackUrl = Url.Action("ResetPassword", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);

您需要在将code(令牌)发送到电子邮件之前对其进行url编码,即将其更改为code=HttpUtivics。UrlEncode(code)

您不需要这一行。密码替换(“,”)

希望这有帮助。

诸葛苏燕
2023-03-14

我的问题非常相似,但碰巧是我的路由引擎将所有URL转换为小写(用于搜索引擎优化等)。我需要确保查询字符串参数允许混合大小写。Base64使用混合大小写。

我将NoLowercaseQueryString属性添加到我的每个控制器方法中。这是特定于MVC样板项目的。

 类似资料:
  • 每当我试图将电子邮件输入alertdialog时,我都会出错。我试图让它发送一个恢复密码的电子邮件输入。这是我收到的代码和错误消息 代码: 错误:

  • 如何获取新ASP中用户的密码。网络身份识别系统?或者如何在不知道当前密码(用户忘记密码)的情况下重置?

  • 我正在ASP. NET中实现自己的重置密码。在重置密码中,首先我创建一个随机字符串并将其邮寄到用户电子邮件。对于电子邮件中的链接,如http://xyz.com/account/forgot?random=xxxx

  • 我们刚刚启动了我们的ASP。NETMVC(使用Identity 2.0)web应用程序6天前已经有超过5000人注册了帐户,太棒了! 问题是3-5%点击确认电子邮件链接的用户(似乎也是重置密码)会出现错误屏幕,大概是因为他们有一个无效的令牌。 我在StackOverflow上读到,您需要对url进行编码,以避免特殊字符将其丢弃,然后在验证之前对其进行解码。不过,我这样做没有效果,一些用户仍然在他们

  • 我有两台服务器使用相同的ASP。NET核心标识后端。我使用以下命令生成密码重置令牌: 我通过电子邮件链接发送此令牌。当用户单击链接时,他们会被带到一个单独的站点,该站点应提供一个用户界面来更改密码。以下代码处理用户提交令牌及其新密码的密码: 在第二台服务器上,标识结果总是返回false,因为“无效令牌”。 通过查看源代码,我看到令牌是使用IP地址生成的(因此我理解令牌验证失败的原因)。 我的问题是

  • 我正在尝试使用文档在我的Laravel 5.1应用程序上重置密码。当我点击send password reset(发送密码重置)按钮时,会出现以下错误。 QueryException in Connection.php第651行:SQLSTATE[42S22]:未找到列:1054“where子句”中的未知列“email”(SQL:delete fromwhere=abc@abc.com).