2016-09-26 62 views
0

我正試圖在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'的值是不同的。 任何幫助將不勝感激

+0

重置密碼網頁 – cell

回答