knockout.js 忘记了身份为www.example.com的密码asp.net

qf9go6mv  于 2022-11-10  发布在  .NET
关注(0)|答案(1)|浏览(194)

在我的MVC和Web API项目中,我使用ASP.NET标识进行登录。
这是我在AccountController上的“忘记密码”函数:

[HttpPost]
[AllowAnonymous]
[Route("ForgotPassword")]
public async Task<IHttpActionResult> ForgotPassword(ForgotPasswordViewModel model) 
{
    if (ModelState.IsValid) 
    {
        var user = await UserManager.FindByNameAsync(model.Email);

        if (user == null || !(await UserManager.IsEmailConfirmedAsync(user.Id))) 
            return Ok();

        try 
        {
            var code = await UserManager.GeneratePasswordResetTokenAsync(user.Id);

            var callbackUrl = new Uri(@ "http://MyProject/ResetPassword?userid=" + user.Id + "&code=" + code);

            string subject = "Reset Password";
            string body = "Please reset your password by clicking <a href=\"" + callbackUrl + "\">here</a>";
            SendEmail(user.Email, callbackUrl, subject, body);
        } 
        catch (Exception ex) 
            throw new Exception(ex.ToString());

        return Ok();
    }

    // If we got this far, something failed, redisplay form
    return BadRequest(ModelState);
}

我收到了确认电子邮件,我被成功重定向到“重置密码”视图,但我不确定如何继续。
如何使用以下参数重置密码:新密码,确认密码和代码?
我尝试调用SetPassword方法,但出现401错误。

self.resetPassword = function () {
    var data = {
        Email: self.loginUserName(),
        NewPassword: self.registerPassword(),
        ConfirmPassword: self.registerPassword2()
    }
    $.ajax({
        type: 'POST',
        url: '../API/Account/SetPassword',
        contentType: 'application/json; charset=utf-8',
        data: JSON.stringify(data),
        complete: showError
    });
}

和setPassword函数:

// POST api/Account/SetPassword
[Route("SetPassword")]
public async Task<IHttpActionResult> SetPassword(SetPasswordBindingModel model) 
{
    if (!ModelState.IsValid) 
        return BadRequest(ModelState);

    IdentityResult result = await UserManager.AddPasswordAsync(User.Identity.GetUserId(), model.NewPassword);

    if (!result.Succeeded) 
        return GetErrorResult(result);

    return Ok();
}

目前的流程是:
1.用户单击“忘记密码”链接。
1.他将被重定向到“忘记密码”视图,其中包含一个字段:电子邮件。
1.用户提供他的电子邮件地址并提交表单。
1.该请求正被发送到“忘记密码”功能。
1.正在向客户端发送一封带有唯一代码的电子邮件。

  • 到目前为止,我已经编写了代码并使其正常工作,但我不确定如何 * 实现后续步骤:

1.用户将重定向到“重置密码”视图,该视图包含3个字段:电子邮件、新密码和确认密码。
1.用户提交表单后,将向SetPassword函数(?)发送一个带有唯一代码的请求,并且用户的密码将成功重置。
先谢谢你。

ffscu2ro

ffscu2ro1#

听起来您的SetPassword API应该呼叫

var user = await UserManager.FindByNameAsync(model.Email);
if (user != null)
{
    var result = await UserManager.ResetPasswordAsync(user.Id, model.Code, model.NewPassword);
    if (result.Succeeded)
    {
          //handle success
    }
}
//handle invalid

相关问题