2
在我的MVC和Web API项目我使用ASP.NET身份登录。忘记密码与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);
}
我收到确认邮件,我成功地重定向到重置密码查看,但随后我不知道如何着手。
如何使用以下参数重置密码:NewPssword,ConfirmPassword和Code?
对不起,如果这是一个愚蠢的问题,但我有点困惑。
我试图调用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();
}
目前,该过程是S-如下: “忘记密码” 链接
- 用户点击。
- 他被重定向到忘记密码视图,该视图有一个字段:电子邮件。
- 用户提供他的电子邮件地址并提交表单。
- 该请求正在发送到忘记密码功能。
- 具有唯一代码的电子邮件正在发送给客户端。
到这里我写的代码,并得到它的工作,但我不知道该如何实施的下一步骤:
- 用户被重定向重置密码视图有3个字段:电子邮件,新密码和确认密码。
- 用户提交表单,使用唯一代码将请求发送到SetPassword函数(?),并且用户的密码正在成功重置。
在此先感谢。
谢谢您的回答,我不知道你的意思,你就可以解释一下吗? – user3378165
你必须发布相关的代码才能得到确切的答案..你发布了你所说的'ForgotPassword'动作,但你没有发布你说的'SetPassword'动作,你说的是返回一个错误..很难通过您发布的2个片段准确告诉您出了什么问题。 – JamieD77
你是对的,我编辑了我的问题,非常感谢你的帮助! – user3378165