.net core identity(一)简单运用
1.net core identity涉及到很多知识,很多概念包括Claims,Principal等等概念需要我们一步步学习才能掌握其原理,有两篇博客是比较好的介绍该框架的,
https://segmentfault.com/a/1190000014966349
http://www.cnblogs.com/savorboard/p/aspnetcore-identity.html
2.我在这里先不涉及到上面2篇博客提到的较为高深的内容,而是按照Adam Freeman的.net core mvc中相关代码来做一个小例子
3.首先我们需要明确一个概念是AspNetCore.Identity这一框架是为我们身份认证和权限管理统一做出的抽象,使我们可以通过实现相关接口或方法来完成身份认证的模块,
而不用自己去实现相关繁复的功能.那么下面就进入正题
4.Microsoft.AspNetCore.Identity 命名空间下IdentityUser 为我们定义了用户身份的基类,这里展示一部分属性
public class IdentityUser<TKey> where TKey : IEquatable<TKey>{ public IdentityUser(); public IdentityUser(string userName); public virtual DateTimeOffset? LockoutEnd { get; set; } public virtual int AccessFailedCount { get; set; } public virtual string UserName { get; set; } public virtual string Email { get; set; } }
5.我们可以通过实现IdentityUser来使用
public class AppUser: IdentityUser { //加入其它属性 }
6.实现IdentityDbContext配置上下文能用到ef的相关功能
public class AppIdentityDbContext: IdentityDbContext<AppUser> { //public DbSet<AppUser> appuser public AppIdentityDbContext(DbContextOptions<AppIdentityDbContext> options) : base(options) { } }
7.Startup启动类配置,
AddIdentity方法指定用户和用户的角色类,我们用我们定义的AppUser 和系统定义的IdentityRoleAddEntityFrameworkStores 用于配置应用Ef哪个上下文来对用户信息做存储AddDefaultTokenProviders用于配置令牌的实现,是cookie还是jwt等等,这一块不熟,最后利用app.UseAuthentication()将identity加入管道中.
下面的一下配置用来配置用户名,邮箱,密码的一些规则,可以不写
services.AddDbContext<AppIdentityDbContext>(options => options.UseSqlServer(Configuration["Data:SportStoreIdentity:ConnectionString"])); services.AddIdentity<AppUser, IdentityRole>(option=> { //邮箱必须唯一 option.User.RequireUniqueEmail = true; //用户名只许小写字母拼写 option.User.AllowedUserNameCharacters = "abcdefghijklmnopqrstuvwxyz"; option.Password.RequiredLength = ; option.Password.RequireNonAlphanumeric = false; option.Password.RequireLowercase = false; option.Password.RequireUppercase = false; option.Password.RequireDigit = false; }) .AddEntityFrameworkStores<AppIdentityDbContext>() .AddDefaultTokenProviders(); public void Configure(IApplicationBuilder app) { app.UseStatusCodePages(); app.UseDeveloperExceptionPage(); app.UseStaticFiles(); app.UseAuthentication(); app.UseMvcWithDefaultRoute();}
8.createModel 和Controller,可以看出UserManager是对用户信息做出管理的一个类,你们可以进入看看有什么方法,最后调用就不用我说了吧
public class CreateModel { [Required] public string Name { get; set; } [Required] public string Email { get; set; } [Required] public string Password { get; set; } }
public class AdminController : Controller { private UserManager<AppUser> userManager; public AdminController(UserManager<AppUser> usrMgr { userManager = usrMgr; }
public IActionResult Index(){
return View(userManager.Users);
}
public ViewResult Create() => View(); [HttpPost] public async Task<IActionResult> Create(CreateModel model) { if (ModelState.IsValid) { AppUser user = new AppUser { UserName = model.Name, Email = model.Email }; IdentityResult result = await userManager.CreateAsync(user, model.Password); if (result.Succeeded) { return RedirectToAction("Index"); } else { foreach (IdentityError error in result.Errors) { ModelState.AddModelError("", error.Description); } } } return View(model); } }
9.果然是技术不够,写这么点就有点力不从心,真是羡慕那些长篇大论的大神,这就是我的理解,肯定有欠缺的地方,望大家指正
最新文章
- 返水bug-百威
- c/c++系列的运算符优先级总结
- 基本变换(读书笔记5 --- Real-Time rendering)
- windows编程:资源和播放声音
- windows下安装和配置mongoDB
- TreeView控件
- docker-hub 账户
- Windows Phone 8.1开发:如何让ListView滚动到顶部,回到第一条?
- Android Activity界面切换添加动画特效
- ASPNETMVC多语言方案
- OpenSUSE 13.2安装Texlive2014+Texmaker+Lyx
- hadoop记录-hadoop集群日常运维命令
- Updatepanel 后端返回后,在 Updatepanel 内控件的前端 js 失效问题
- [git/GitHub] git push 时报错:fatal: remote error: You can&#39;t push to git://github.com/user/xxx.git(已解决)
- go语言常见问题总结
- chrome driver 下载
- 奇怪吸引子---BurkeShaw
- Spring Boot 2.1.1.RELEASE 多数据源配置与使用
- svg图标(svg实现的QQ图标)
- JMeter怎样测试WebSocket