我正試圖在Web API中開發重置密碼功能。電子郵件生成在Rest Web Service(Web API)中執行。一旦用戶收到帶鏈接的生成電子郵件,當他點擊鏈接時,用戶應該被重定向到駐留在MVC網站中的ResetPasswordPage(Web頁面不在Web API中,它在我的同事開發的網站中)不同的端口。 當我點擊ResetPassword頁面時,它會打開重置密碼網頁..然後點擊提交按鈕,我會收到一個'Invalid Token'消息。重置密碼功能會生成無效的令牌
在Web API(REST Web服務)的代碼如下
string code = await UserManager.GeneratePasswordResetTokenAsync(user.Id);
code = HttpUtility.UrlEncode(code);
string forgotPasswordHost = System.Configuration.ConfigurationManager.AppSettings["ForgotPasswordURL"];
string forgotPasswordURL = Url.Route("URLApi", new {controller = "ResetPassword", userId = user.Id, code = code });
try
{
//await UserManager.SendEmailAsync(user.Id, "Reset Password", $"{url}");
await UserManager.SendEmailAsync(user.Id, "Reset Password", "Please reset your password by clicking <a href=\"" + forgotPasswordHost + forgotPasswordURL + "\">here</a>");
}
catch (Exception e)
{
return new Status
{
status = "Invalid Input"
};
}
在點擊URL,它進入下面的代碼在網站
[AllowAnonymous]
public ActionResult ResetPassword(string code)
{
return code == null ? View("Error") : View();
}
我得到無效的令牌從低於方法(這是網站代碼)
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> ResetPassword(ResetPasswordViewModel model)
{
if (!ModelState.IsValid)
{
return View(model);
}
var user = await UserManager.FindByNameAsync(model.Email);
if (user == null)
{
// Don't reveal that the user does not exist
return RedirectToAction("ResetPasswordConfirmation", "Account");
}
var result = await UserManager.ResetPasswordAsync(user.Id, model.Code, model.Password);
if (result.Succeeded)
{
return RedirectToAction("ResetPasswordConfirmation", "Account");
}
AddErrors(result);
return View();
}
然後點擊電子郵件鏈接,網頁打開起來。但是我注意到,當網頁被打開並且頁面被提交之後,'_RequestVerificationToken'的值是不同的。 任何幫助將不勝感激
重置密碼網頁 – cell