忘记 asp.net 身份的密码
Forgot Password with asp.net identity
在我的 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);
}
我收到了确认电子邮件,我已成功重定向到重置密码视图,但我不确定如何继续。
如何使用以下参数重置密码: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
});
}
和设置密码功能:
// 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();
}
目前流程如下:
- 用户点击 "Forgot Password" link。
- 他被重定向到具有一个字段的忘记密码视图:电子邮件。
- 用户提供了他的电子邮件地址并提交了表单。
- 正在向忘记密码功能发送请求。
- 正在向客户发送一封带有唯一代码的电子邮件。
直到这里,我编写了代码并让它工作,但我不确定如何实施后续步骤:
- 用户被重定向到具有 3 个字段的重置密码视图:电子邮件、新密码和确认密码。
- 用户提交表单,正在向带有唯一代码的 SetPassword 函数 (?) 发送请求,用户密码已成功重置。
提前致谢。
听起来你的 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
在我的 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);
}
我收到了确认电子邮件,我已成功重定向到重置密码视图,但我不确定如何继续。
如何使用以下参数重置密码: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
});
}
和设置密码功能:
// 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();
}
目前流程如下:
- 用户点击 "Forgot Password" link。
- 他被重定向到具有一个字段的忘记密码视图:电子邮件。
- 用户提供了他的电子邮件地址并提交了表单。
- 正在向忘记密码功能发送请求。
- 正在向客户发送一封带有唯一代码的电子邮件。
直到这里,我编写了代码并让它工作,但我不确定如何实施后续步骤:
- 用户被重定向到具有 3 个字段的重置密码视图:电子邮件、新密码和确认密码。
- 用户提交表单,正在向带有唯一代码的 SetPassword 函数 (?) 发送请求,用户密码已成功重置。
提前致谢。
听起来你的 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