2016-08-22 5 views
4

Я создал метод, который, когда пользователь запрашивает сброс пароля, отправляет электронное письмо пользователю. Теперь я хочу создать URL-адрес, который открывает ResetPassword.cshtml с веб-сайта, который нужно открыть. Я не могу попасть на сайт, потому что страница веб-сайта запрашивает файлы cookie, которых у меня нет.Как использовать функцию сброса пароля в веб-API 2

ответ

3

Первый генерирует URL для сброса пароля страницы:

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 }); 

После того, как создать контроллер MVC с методом сброса пароля:

 [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(); 
     } 

Затем создать модель, чтобы принять новый пароль:

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; } 
} 

Наконец-то создайте представление для сброса пароля:

@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

Привет Волен, Как использовать мой Web API [ValidateAntiForgeryToken] , который работает на печенье .. – cell

+1

Чтобы использовать его, вы должны добавить MVC LIB (System.Web.MVC.dll) для вашего проекта. Это должно помочь вам. – Volen

+0

Как я могу указать URL-адрес, чтобы открыть веб-страницу Reset Web на веб-сайте. – cell