2016-08-22 4 views

Antwort

3

Zuerst eine URL für Zurücksetzen des Passworts Seite erzeugen:

string code = await UserManager.GeneratePasswordResetTokenAsync(user.Id); 
//For MVC controller 
var callbackUrl = Url.Action("ResetPassword", "Account", new { code = code }, protocol: Request.Url.Scheme); 
//For Web API controller 
var callbackUrl = Url.Link("Default", new { Controller = "Account", Action = "ResetPassword", code = code }); 

Nachdem es MVC-Controller mit Reset-Passwort-Methode erstellen:

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

     [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 
      } 
      var result = await UserManager.ResetPasswordAsync(user.Id, model.Code, model.Password); 
      if (result.Succeeded) 
      { 
       //... 
      } 
      AddErrors(result); 
      return View(); 
     } 

Dann das Modell erstellen neues Passwort akzeptieren:

public class ResetPasswordViewModel 
{ 
    [Required] 
    [EmailAddress] 
    [Display(Name = "Email")] 
    public string Email { get; set; } 

    [Required] 
    [DataType(DataType.Password)] 
    [Display(Name = "Password")] 
    public string Password { get; set; } 

    [DataType(DataType.Password)] 
    [Display(Name = "Confirm password")] 
    [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")] 
    public string ConfirmPassword { get; set; } 

    public string Code { get; set; } 
} 

Schließlich erstellen Sie die Ansicht für das Zurücksetzen des Passworts:

@model TreeTag.Models.ResetPasswordViewModel 
@{ 
    ViewBag.Title = "Reset password"; 
} 

<h2></h2> 

@using (Html.BeginForm("ResetPassword", "Account", FormMethod.Post, new { @class = "form-horizontal", role = "form" })) 
{ 
    @Html.AntiForgeryToken() 
    <h4>Reset your password.</h4> 
    <hr /> 
    @Html.ValidationSummary("", new { @class = "text-danger" }) 
    @Html.HiddenFor(model => model.Code) 
    <div class="form-group"> 
     @Html.LabelFor(m => m.Email, new { @class = "col-md-2 control-label" }) 
     <div class="col-md-10"> 
      @Html.TextBoxFor(m => m.Email, new { @class = "form-control" }) 
     </div> 
    </div> 
    <div class="form-group"> 
     @Html.LabelFor(m => m.Password, new { @class = "col-md-2 control-label" }) 
     <div class="col-md-10"> 
      @Html.PasswordFor(m => m.Password, new { @class = "form-control" }) 
     </div> 
    </div> 
    <div id="confirm_password" class="form-group"> 
     @Html.LabelFor(m => m.ConfirmPassword, new { @class = "col-md-2 control-label" }) 
     <div class="col-md-10"> 
      @Html.PasswordFor(m => m.ConfirmPassword, new { @class = "form-control" }) 
     </div> 
    </div> 
    <div class="form-group"> 
     <div class="col-md-offset-2 col-md-10"> 
      <input type="submit" class="btn btn-default" value="Reset" /> 
     </div> 
    </div> 
} 
+0

Hallo Volen, Wie kann meine Web-API [ValidateAntiForgeryToken] , die auf Plätzchen arbeitet .. – cell

+1

es nutzen zu können, haben MVC lib (System.Web.MVC.dll) zu einem Projekt hinzuzufügen. Es sollte dir helfen. – Volen

+0

Wie kann ich die URL zeigen, um die Reset-Webseite auf der Website zu öffnen. – cell

Verwandte Themen