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相关推荐

  1. 一篇搞定 SpringBoot+Mybatis+Shiro 实现多角色权限管理

    初衷:我在网上想找整合springboot+mybatis+shiro并且多角色认证的博客,发现找了好久也没有找到想到的,现在自己会了,就打算写个博客分享出去,希望能帮到你. 原创不易,请点赞支持! ...

  2. 后台用户角色权限管理设计

    目录 1.概述 2.设计 2.1 用户管理 2.2 角色管理 2.3 权限管理 2.4 用户.角色.权限的关系 3.总结 1.概述 在设计产品后台系统设置时,可根据不同项目的实际需求来设计后台系统设置 ...

  3. Vue 角色权限管理设计与实现

    目前项目中使用到的角色权限管理共分为三级,分别是页面级.行为级(控件级).接口级,这里记录一下三级权限在 Vue 中的实现. 一.接口设计 用户登录后该用户的角色与权限信息会一同返回给前端,前端将这些 ...

  4. Ant Design Pro v5 获取动态菜单与基于角色权限管理视频教程(33 个视频)

    Ant Design Pro v5 获取动态菜单与基于角色权限管理视频教程(33 个视频) 很多人问如何获取动态菜单的,所以在 antd prov 5 来讲一下角色管理的.从最基础的用户管理,角色管理 ...

  5. springboot整合security,mybatisPlus,thymeleaf实现登录认证及用户,菜单,角色权限管理

    介绍 本系统为springboot整合security,mybatisPlus,thymeleaf实现登录认证及用户,菜单,角色权限管理.页面为极简模式,没有任何渲染. 源码:https://gite ...

  6. Jenkins中安装Role-based Authorization Strategy插件来实现用户角色权限管理

    场景 CentOS中Jenkins的下载.安装.配置与启动(图文教程): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/11649 ...

  7. java用户角色权限管理 只显示姓_扩展RBAC用户角色权限设计方案

    RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成"用 ...

  8. Oracle中用户角色权限管理

    一,Oracle 用户,角色,权限 权限管理是 Oracle 系统的精华,不同用户登录到同一数据库中,可能看到不同数量的表,拥有不同的权限.Oracle 的权限分为系统权限和数据对象权限,共一百多种, ...

  9. Jenkins 用户角色权限管理

    文章目录 背景 安装插件 管理角色 全局角色 项目角色 节点角色 管理用户 分配角色 背景 Jenkins 一般用作团队项目持续集成环境,所以就会设计多用户的情况,我们需要为不同人员设置不同的角色,进 ...

最新文章

  1. win10系统由于服务器出错翻译失败,win10系统下谷歌浏览器翻译失败如何解决
  2. dns tunnel工具地址
  3. 【IOS 开发】Object - C 面向对象 - 类 , 对象 , 成员变量 , 成员方法
  4. 费曼学习法:为何被称为史上最牛的学习法,它的本质究竟是什么?
  5. 使用npm安装TypeScript
  6. FckEditor配置详解
  7. Win7双屏显示设置
  8. Atitit.rsa密钥生成器的attilax总结
  9. 【心音信号】基于matlab GUI EMD心音信号特征提取【含Matlab源码 1735期】
  10. Oracle存在修改,不存在插入记录 SQL
  11. WolframTones:用一种新科学谱写一种新音乐
  12. C语言进制转换以及原补反码位运算介绍
  13. windows下安装python-pcl及其问题解决办法
  14. 户外广告牌新标准将规定字体、颜色
  15. HTML5期末大作业:美食网站设计——餐饮美食-咖啡(5页) HTML5网页设计成品_学生DW静态食品网页设计_web课程设计网页制作
  16. thinkphp3.2读取Excel文件
  17. 荷塘趣事计算机作业,【《荷塘趣事》摄影图片】生态摄影_人称开哥_太平洋电脑网摄影部落...
  18. PHP学习资源整理:入门到进阶全系列
  19. Problem Driven Pattern, Coaching Pattern Series
  20. csdn上怎样可以获得金币?

热门文章

  1. python123平台作业答案循环结构棋盘放米_python练习集100题(1-20)
  2. python读取word内容存入数据库、并求simhash_介绍一个基于simhash作海量文章排重的库:simhashpy...
  3. 学习oracle的感悟,随笔:最近关于Oracle学习思考的一些感悟
  4. 两个三维向量叉积_线性代数的本质08 叉积
  5. 综合前置接口报文规范_浅谈用HttpRunner进行接口自动化测试
  6. c语言 除法小数点怎么写,高精度除法小数点位数
  7. android秋招面试题及答案,阿里巴巴2019秋招客户端开发工程师在线笔试题和面试题答案...
  8. springboot中mongodb自定义类型转换器
  9. excel两个表格数据对比_Excel表格技巧—如何统计数据个数
  10. linux vino vnc,Ubuntu下包含2种远程桌面的方式:VINO-Server以及VNC Server。 .