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'の値が異なっていることに気付きました。 助けていただければ幸いです。
パスワードのリセットWebページ – cell