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