2016-09-26 13 views
0

Web APIでパスワードのリセット機能を開発しようとしています。電子メール生成は、Rest Web Service(Web API)で実行されます。ユーザーがリンク付きで生成された電子メールを受信すると、そのリンクをクリックすると、MVC WebサイトにあるResetPasswordPageにリダイレクトする必要があります(Web APIはWeb APIにはありません。異なるポート。 ResetPasswordページをクリックすると、Reset Password Webページが開き、Submitボタンをクリックすると、「無効なトークン」というメッセージが表示されます。パスワードのリセット機能が無効なトークンを生成します

のWeb API(REST Webサービス)のコードは、URLをクリックすると

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" 
       }; 
      } 

以下の通りである、それは私が下からの無効なトークンを取得ウェブサイトに以下のコードに

[AllowAnonymous] 
     public ActionResult ResetPassword(string code) 
     { 
      return code == null ? View("Error") : View(); 
     } 

を行きます方法(これはWebサイトコードです)

[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(); 
     } 

電子メールリンクをクリックすると、Webページが開きますアップ。しかし、私は、Webページが開かれたときと、そのページが投稿された後に、 '_RequestVerificationToken'の値が異なっていることに気付きました。 助けていただければ幸いです。

+0

パスワードのリセットWebページ – cell

答えて

関連する問題