2017-12-19 1 views
0

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.

+0

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

+0

Wie man eine Pause macht? Kannst du es ausarbeiten? – Haro

+0

Setzen Sie eine Pause wie in einer Debug-Pause. – Bojje

Antwort

0

ich irgendwie das gleiche Problem haben, aber ich möchte in der Lage sein, Passwörter mit Benutzerbenutzernamen zurücksetzen (i von E-Mail-Benutzernamen geändert)

var user = erwarten UserManager.FindByNameAsync (model.Email);

Hier werden Sie mit FindByNameAsync(), ändern Sie ihn auf FindByEmailAsync()

Verwandte Themen