Ich erstelle ein ASP.NET MVC-Projekt und auch die Passwortwiederherstellung, wenn Benutzer das Passwort vergessen, können sie es zurücksetzen. Ich bin in der Lage, E-Mail für das Zurücksetzen des Kennworts zu senden, aber nach dem Versuch, das Kennwort auf resetpassword.cshtml
zurückzusetzen, erhalte ich einen Fehler mit der Meldung "Invalid Token"Wie Token zum Zurücksetzen des Passworts in ASP.NET MVC generiert werden
Dies sind meine Aktionsmethoden im Konto-Controller.
// GET: /Account/ForgotPassword
[AllowAnonymous]
public ActionResult ForgotPassword()
{
return View();
}
// POST: /Account/ForgotPassword
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult>
ForgotPassword(ForgotPasswordViewModel model)
{
if (ModelState.IsValid)
{
var user = new ApplicationUser { UserName = model.Email,
Email = model.Email };
var result = await UserManager.CreateAsync(user,
model.Email);
System.Net.Mail.MailMessage m = new
System.Net.Mail.MailMessage(
new System.Net.Mail.MailAddress("[email protected]",
"Reset Password"),
new System.Net.Mail.MailAddress(model.Email));
m.Subject = "Reset Password";
string code = user.Id;
m.Body = string.Format("Dear {0}<BR/>Please reset your
password by clicking the following link: <a href=\"{1}\"
title=\"User Email Confirm\">{1}</a>", user.UserName,
Url.Action("ResetPassword", "Account", new { userId = user.Id,
code = code }, protocol: Request.Url.Scheme));
m.IsBodyHtml = true;
System.Net.Mail.SmtpClient smtp = new
System.Net.Mail.SmtpClient("smtp.gmail.com", 587);
smtp.Credentials = new
System.Net.NetworkCredential("[email protected]",
"mypassword");
smtp.EnableSsl = true;
smtp.Send(m);
return RedirectToAction("ForgotPasswordConfirmation",
"Account", new { Email = user.Email });
}
// If we got this far, something failed, redisplay form
return View(model);
}
//
// GET: /Account/ResetPassword
[AllowAnonymous]
public ActionResult ResetPassword(string code)
{
return code == null ? View("Error") : View();
}
//
// POST: /Account/ResetPassword
[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();
}
Ich habe keine Ahnung, wie dieses Problem zu beheben.
Legen Sie eine Pause in der 'ResetPassword' Methode auf der Linie, wo Sie' ResetPasswordAsync' nennen. Können Sie über diesen Punkt hinausgehen, um zu sehen, ob das Ergebnis ein Erfolg war? – James
Wie man eine Pause macht? Kannst du es ausarbeiten? – Haro
Setzen Sie eine Pause wie in einer Debug-Pause. – Bojje