ASP.NET Identity “角色-权限”管理 2
1. 自定义属性
参考:ASP.NET Identity 2.0: Customizing Users and Roles
以扩展ApplicationUser为例。
1.1. 新增Password属性
修改IdentityModel.cs,ApplicationUser继承自IdentityUser,只需为它增加Password属性,用来保存密码明文。
public class ApplicationUser : IdentityUser { public ApplicationUser() : base() { } public ApplicationUser(string userName) : base(userName) { } /// <summary> ///密码明文 /// </summary> [Required] [Display(Name = "密码")] public string Password { get; set; } public async Task<ClaimsIdentity> GenerateUserIdentityAsync(ApplicationUserManager manager) { // 请注意,authenticationType 必须与 CookieAuthenticationOptions.AuthenticationType 中定义的相应项匹配 var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie); // 在此处添加自定义用户声明 return userIdentity; } } |
1.2. 修改ViewModel
修改AccountViewModel.cs,采用用户名登录,为登录与注册ViewModel增加用户名。
public class LoginViewModel { [Required] [Display(Name = "用户名")] public string Username { get; set; } [Required] [DataType(DataType.Password)] [Display(Name = "密码")] public string Password { get; set; } [Display(Name = "记住我?")] public bool RememberMe { get; set; } } |
public class RegisterViewModel { [Required] [Display(Name = "用户名")] public string Username { get; set; } [Required] [EmailAddress] [Display(Name = "电子邮件")] public string Email { 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; } } |
1.3. 修改Controller
修改AccountController.cs的Login与Register方法。
[HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public async Task<ActionResult> Login(LoginViewModel model, string returnUrl) { if (!ModelState.IsValid) { return View(model); } // 这不会计入到为执行帐户锁定而统计的登录失败次数中 // 若要在多次输入错误密码的情况下触发帐户锁定,请更改为 shouldLockout: true var result = await SignInManager.PasswordSignInAsync(model.Username, model.Password, model.RememberMe, shouldLockout: false); switch (result) { case SignInStatus.Success: return RedirectToLocal(returnUrl); case SignInStatus.LockedOut: return View("Lockout"); case SignInStatus.RequiresVerification: return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe }); case SignInStatus.Failure: default: ModelState.AddModelError("", "无效的登录尝试。"); return View(model); } } |
[HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public async Task<ActionResult> Register(RegisterViewModel model) { if (ModelState.IsValid) { var user = new ApplicationUser { UserName = model.Username, Password = model.Password, Email = model.Email }; var result = await UserManager.CreateAsync(user, model.Password); if (result.Succeeded) { await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false); // 有关如何启用帐户确认和密码重置的详细信息,请访问 http://go.microsoft.com/fwlink/?LinkID=320771 // 发送包含此链接的电子邮件 // string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id); // var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme); // await UserManager.SendEmailAsync(user.Id, "确认你的帐户", "请通过单击 <a href=\"" + callbackUrl + "\">這裏</a>来确认你的帐户"); return RedirectToAction("Index", "Home"); } AddErrors(result); } // 如果我们进行到这一步时某个地方出错,则重新显示表单 return View(model); } |
1.4. 修改View
Login.cshtml
<h4>使用本地帐户登录。</h4> <hr /> @Html.ValidationSummary(true, "", new { @class = "text-danger" }) <div class="form-group"> @Html.LabelFor(m => m.Username, new { @class = "col-md-2 control-label" }) <div class="col-md-10"> @Html.TextBoxFor(m => m.Username, new { @class = "form-control" }) @Html.ValidationMessageFor(m => m.Username, "", 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-10"> @Html.PasswordFor(m => m.Password, new { @class = "form-control" }) @Html.ValidationMessageFor(m => m.Password, "", new { @class = "text-danger" }) </div> </div> <div class="form-group"> <div class="col-md-offset-2 col-md-10"> <div class="checkbox"> @Html.CheckBoxFor(m => m.RememberMe) @Html.LabelFor(m => m.RememberMe) </div> </div> </div> <div class="form-group"> <div class="col-md-offset-2 col-md-10"> <input type="submit" value="登录" class="btn btn-default" /> </div> </div> |
Register.cshtml
<h4>创建新帐户。</h4> <hr /> @Html.ValidationSummary("", new { @class = "text-danger" }) <div class="form-group"> @Html.LabelFor(m => m.Username, new { @class = "col-md-2 control-label" }) <div class="col-md-10"> @Html.TextBoxFor(m => m.Username, new { @class = "form-control" }) </div> </div> <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 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="注册" /> </div> </div> |
1.5. 运行效果
登录
注册
转载于:https://www.cnblogs.com/mlemon/p/4304583.html
ASP.NET Identity “角色-权限”管理 2相关推荐
- 一篇搞定 SpringBoot+Mybatis+Shiro 实现多角色权限管理
初衷:我在网上想找整合springboot+mybatis+shiro并且多角色认证的博客,发现找了好久也没有找到想到的,现在自己会了,就打算写个博客分享出去,希望能帮到你. 原创不易,请点赞支持! ...
- 后台用户角色权限管理设计
目录 1.概述 2.设计 2.1 用户管理 2.2 角色管理 2.3 权限管理 2.4 用户.角色.权限的关系 3.总结 1.概述 在设计产品后台系统设置时,可根据不同项目的实际需求来设计后台系统设置 ...
- Vue 角色权限管理设计与实现
目前项目中使用到的角色权限管理共分为三级,分别是页面级.行为级(控件级).接口级,这里记录一下三级权限在 Vue 中的实现. 一.接口设计 用户登录后该用户的角色与权限信息会一同返回给前端,前端将这些 ...
- Ant Design Pro v5 获取动态菜单与基于角色权限管理视频教程(33 个视频)
Ant Design Pro v5 获取动态菜单与基于角色权限管理视频教程(33 个视频) 很多人问如何获取动态菜单的,所以在 antd prov 5 来讲一下角色管理的.从最基础的用户管理,角色管理 ...
- springboot整合security,mybatisPlus,thymeleaf实现登录认证及用户,菜单,角色权限管理
介绍 本系统为springboot整合security,mybatisPlus,thymeleaf实现登录认证及用户,菜单,角色权限管理.页面为极简模式,没有任何渲染. 源码:https://gite ...
- Jenkins中安装Role-based Authorization Strategy插件来实现用户角色权限管理
场景 CentOS中Jenkins的下载.安装.配置与启动(图文教程): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/11649 ...
- java用户角色权限管理 只显示姓_扩展RBAC用户角色权限设计方案
RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成"用 ...
- Oracle中用户角色权限管理
一,Oracle 用户,角色,权限 权限管理是 Oracle 系统的精华,不同用户登录到同一数据库中,可能看到不同数量的表,拥有不同的权限.Oracle 的权限分为系统权限和数据对象权限,共一百多种, ...
- Jenkins 用户角色权限管理
文章目录 背景 安装插件 管理角色 全局角色 项目角色 节点角色 管理用户 分配角色 背景 Jenkins 一般用作团队项目持续集成环境,所以就会设计多用户的情况,我们需要为不同人员设置不同的角色,进 ...
最新文章
- win10系统由于服务器出错翻译失败,win10系统下谷歌浏览器翻译失败如何解决
- dns tunnel工具地址
- 【IOS 开发】Object - C 面向对象 - 类 , 对象 , 成员变量 , 成员方法
- 费曼学习法:为何被称为史上最牛的学习法,它的本质究竟是什么?
- 使用npm安装TypeScript
- FckEditor配置详解
- Win7双屏显示设置
- Atitit.rsa密钥生成器的attilax总结
- 【心音信号】基于matlab GUI EMD心音信号特征提取【含Matlab源码 1735期】
- Oracle存在修改,不存在插入记录 SQL
- WolframTones:用一种新科学谱写一种新音乐
- C语言进制转换以及原补反码位运算介绍
- windows下安装python-pcl及其问题解决办法
- 户外广告牌新标准将规定字体、颜色
- HTML5期末大作业:美食网站设计——餐饮美食-咖啡(5页) HTML5网页设计成品_学生DW静态食品网页设计_web课程设计网页制作
- thinkphp3.2读取Excel文件
- 荷塘趣事计算机作业,【《荷塘趣事》摄影图片】生态摄影_人称开哥_太平洋电脑网摄影部落...
- PHP学习资源整理:入门到进阶全系列
- Problem Driven Pattern, Coaching Pattern Series
- csdn上怎样可以获得金币?
热门文章
- python123平台作业答案循环结构棋盘放米_python练习集100题(1-20)
- python读取word内容存入数据库、并求simhash_介绍一个基于simhash作海量文章排重的库:simhashpy...
- 学习oracle的感悟,随笔:最近关于Oracle学习思考的一些感悟
- 两个三维向量叉积_线性代数的本质08 叉积
- 综合前置接口报文规范_浅谈用HttpRunner进行接口自动化测试
- c语言 除法小数点怎么写,高精度除法小数点位数
- android秋招面试题及答案,阿里巴巴2019秋招客户端开发工程师在线笔试题和面试题答案...
- springboot中mongodb自定义类型转换器
- excel两个表格数据对比_Excel表格技巧—如何统计数据个数
- linux vino vnc,Ubuntu下包含2种远程桌面的方式:VINO-Server以及VNC Server。 .