2

In meinen MVC und Web API Projekten benutze ich ASP.NET Identity für den Login.Passwort vergessen mit asp.net Identität

Dies ist mein Passwort vergessen Funktion auf der Account:

[HttpPost] 
    [AllowAnonymous] 
    [Route("ForgotPassword")] 
    public async Task<IHttpActionResult> ForgotPassword(ForgotPasswordViewModel model) 
    { 
     if (ModelState.IsValid) 
     { 
      var user = await UserManager.FindByNameAsync(model.Email); 

      if (user == null || !(await UserManager.IsEmailConfirmedAsync(user.Id))) 
      { 
       return Ok(); 
      } 

      try 
      { 
       var code = await UserManager.GeneratePasswordResetTokenAsync(user.Id); 
       var callbackUrl = new Uri(@"http://MyProject/ResetPassword?userid=" + user.Id + "&code=" + code); 

       string subject = "Reset Password"; 
       string body = "Please reset your password by clicking <a href=\"" + callbackUrl + "\">here</a>"; 
       SendEmail(user.Email, callbackUrl, subject, body); 
      } 

      catch (Exception ex) 
      { 
       throw new Exception(ex.ToString()); 
      } 

      return Ok(); 
     } 

     // If we got this far, something failed, redisplay form 
     return BadRequest(ModelState); 
    } 

ich die Bestätigungsmail bekommen, ich erfolgreich auf die Passwort zurücksetzen Ansicht umgeleitet bin, aber dann bin ich sicher, nicht wie es weitergeht.

Wie setze ich ein Passwort mit den folgenden Parametern zurück: NewPssword, ConfirmPassword und Code?

Sorry, wenn es eine dumme Frage ist, aber ich bin ein bisschen verwirrt.

Ich habe versucht, die SetPassword-Methode aufzurufen, aber einen Fehler 401 erhalten.

self.resetPassword = function() { 
    var data = { 
     Email: self.loginUserName(), 
     NewPassword: self.registerPassword(), 
     ConfirmPassword: self.registerPassword2() 
    } 
    $.ajax({ 
     type: 'POST', 
     url: '../API/Account/SetPassword', 
     contentType: 'application/json; charset=utf-8', 
     data: JSON.stringify(data), 
     complete: showError 
    }); 
} 

Und die setPassword Funktion:

// POST api/Account/SetPassword 
    [Route("SetPassword")] 
    public async Task<IHttpActionResult> SetPassword(SetPasswordBindingModel model) 
    { 
     if (!ModelState.IsValid) 
     { 
      return BadRequest(ModelState); 
     } 

     IdentityResult result = await UserManager.AddPasswordAsync(User.Identity.GetUserId(), model.NewPassword); 

     if (!result.Succeeded) 
     { 
      return GetErrorResult(result); 
     } 

     return Ok(); 
    } 

Derzeit ist das Verfahren ein s folgen:

  1. Benutzer klickt auf "Passwort vergessen" -Link.
  2. Er wird zur Ansicht "Passwort vergessen" weitergeleitet, die ein Feld enthält: E-Mail.
  3. Der Benutzer gibt seine E-Mail-Adresse an und reicht das Formular ein.
  4. Die Anfrage wird an die Funktion "Passwort vergessen" gesendet.
  5. Eine E-Mail mit einem eindeutigen Code wird an den Client gesendet.

Bis hier habe ich den Code und habe es zu arbeiten, aber ich bin nicht sicher, wie man die nächsten Schritte implementieren:

  1. Der Benutzer der umgeleitet wird die Passwort zurücksetzen-Ansicht mit drei Feldern: E-Mail, Neues Passwort und Passwort bestätigen.
  2. Der Benutzer sendet das Formular, eine Anfrage wird an die SetPassword-Funktion (?) Mit dem eindeutigen Code gesendet und das Benutzerpasswort wird erfolgreich zurückgesetzt.

Vielen Dank im Voraus.

Antwort

3

Klingt wie sollte Ihr SetPassword api nennen

var user = await UserManager.FindByNameAsync(model.Email); 
if (user != null) 
{ 
    var result = await UserManager.ResetPasswordAsync(user.Id, model.Code, model.NewPassword); 
    if (result.Succeeded) 
    { 
      //handle success 
    } 
} 
//handle invalid  
+0

Dank für Ihre Antwort danken, ich bin nicht sicher, was du meinst, würden Sie erklären können? – user3378165

+0

Sie müssen den entsprechenden Code posten, um eine genaue Antwort zu bekommen ... Sie haben die 'ForgotPassword'-Aktion gepostet, die Sie sagen, funktioniert, aber Sie haben Ihre' SetPassword'-Aktion nicht gepostet, die Sie sagen, gibt einen Fehler zurück .. es ist schwer zu sagen Sie genau, was an den 2 Auszügen, die Sie gepostet haben, falsch ist. – JamieD77

+0

Sie haben Recht, ich habe meine Frage bearbeitet, vielen Dank für Ihre Hilfe! – user3378165