2018教程之mvc+ef之四:Identity用户管理之密码重置
给管理的用户密码重置是很有用的。
一、建立一个仅用于密码重置的模型
的viewModelS下新PasswordRrestModel.cs
using System.ComponentModel.DataAnnotations;
namespace MYtest2018.ViewModels
{
public class PasswordRrestModel
{
[Required]
[Display(Name = "用户名")]
public string RealName { get; set; }
[Required]
[StringLength(100, ErrorMessage = "{0} 必须至少包含 {2} 个字符。", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "密码")]
public string Password { get; set; }
[DataType(DataType.Password)]
[Display(Name = "确认密码")]
[Compare("Password", ErrorMessage = "密码和确认密码不匹配。")]
public string ConfirmPassword { get; set; }
public string Code { get; set; }
}
}
二、后台代码
1.
// <summary>
/// 自己写的密码重置
/// </summary>
/// <param name="code"></param>
/// <returns></returns>
[HttpGet]
//[Authorize(Roles = "Super")]
[AllowAnonymous]
public ActionResult PasswordReset(string id)
{
if (string.IsNullOrWhiteSpace(id))
{
return new HttpStatusCodeResult(System.Net.HttpStatusCode.BadRequest);
}
ApplicationUser user = UserManager.FindById(id);
string code = UserManager.GeneratePasswordResetToken(id);
if (user == null)
{
return HttpNotFound();
}
var resetPasswordViewModel = new PasswordRrestModel()
{
RealName = user.RealName,
Password = user.PasswordHash,
Code = code
};
return View(resetPasswordViewModel);
}
/// 重置密码
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
[HttpPost]
//[Authorize(Roles = "Super")]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> PasswordReset(string id, PasswordRrestModel resetPasswordViewModel)
{
if (!ModelState.IsValid)
{
return View(resetPasswordViewModel);
}
//User user = UserManager.FindById(id);
string code = await UserManager.GeneratePasswordResetTokenAsync(id);
//if (user == null)
//{
// return View("Error");
//}
resetPasswordViewModel.Code = code;
//resetPasswordViewModel.Password = "111111";
var result = await UserManager.ResetPasswordAsync(id, resetPasswordViewModel.Code, resetPasswordViewModel.Password);
if (result.Succeeded)
{
ViewBag.RPWMessagess = "重置成功";
return RedirectToAction("ListUsers", "Account");
}
AddErrors(result);
ViewBag.RPWMessagess = "失败";
return View("成功重置。");
}
前台
@using MYtest2018.Models
@model MYtest2018.ViewModels.PasswordRrestModel
@{
ViewBag.Title = "PasswordReset"; Layout = "~/Views/Shared/_Layoutadmin.cshtml";
}
<div class="wrapper wrapper-content animated fadeInRight">
<div class="row">
<div class="col-lg-12">
<div class="ibox ">
<div class="ibox-title">
<h5>[ @Model.RealName ] 的密码重置</h5>
</div>
<div class="ibox-content">
<p>
请输入新密码进行重置。
</p>
<div class="row text-center">
@using (Html.BeginForm("PasswordReset", "Account", null, FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.Code)
@Html.HiddenFor(model => model.RealName)
@*<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.RealName, new { @class = "col-md-2 control-label" })
<div class="col-md-8">
@Html.DisplayFor(m => m.RealName, new { @class = "form-control" })
@Html.ValidationMessageFor(m => m.RealName, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(m => m.Password, new { @class = "col-md-2 control-label" })
<div class="col-md-8">
@Html.PasswordFor(m => m.Password, new { @class = "form-control" })
@Html.ValidationMessageFor(m => m.Password, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(m => m.ConfirmPassword, new { @class = "col-md-2 control-label" })
<div class="col-md-8">
@Html.PasswordFor(m => m.ConfirmPassword, new { @class = "form-control" })
@Html.ValidationMessageFor(m => m.ConfirmPassword, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" class="btn btn-warning" value="重置" /> @Html.ActionLink("返回", "ListUsers", "", new { @class = "btn btn-success" })
</div>
</div>
@ViewBag.RPWMessagess
}
</div>
<div class="m-t-md">
</div>
</div>
</div>
</div>
</div>
</div>
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
浙公网安备 33010602011771号