冯 海

一个程序新人菜鸟的日记,希望大家多多关照。QQ:32316131

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

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2018-08-26 17:37  秋天来了哟  阅读(443)  评论(0)    收藏  举报
认识就是缘份,愿天下人都快乐!
QQ: 32316131
Email: 32316131@qq.com