学习目录
关于如何使用
博客园的童鞋们已经有很多这样的教程了,所以我就不用再这里班门弄斧咯,用最快的方式简单进行介绍。
我直接创建一个微软的示例项目和代码。
这个是 VS2019 的界面。
下图是 .Net Core 2.1+ 版本,微软已经把默认的细节封装起来了
这是简单的项目结构,默认是基于 Microsoft.EntityFrameworkCore 的 ORM 框架来操作数据库的。
我们先打开【Data -> Migrations -> ApplicationDbContext】这个文件。
public class ApplicationDbContext : IdentityDbContext
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
}
微软已经定义好了一个可扩展的 DbContext 对象(不知道DbConext的戳这里),默认命名叫 ApplicationDbContext,当然根据需要你自己改就成了。
这里面没有任何 DbSet 属性或者相关的 EntityTypeConfiguretion 配置,那它的表结构是怎样的呢?我们对着 IdentityDbContext 按 【F12】进入到 代码的从元数据模式。
你发现它集成了 IdentityDbContext 基类,还定义了泛型的类型,IdentityUser 和 IdentityRole 就是我们的实体了,当然通过名字也能知道一个是用户,一个是角色。
但还是没有 DbSet 属性,所以我们继续使用【F12】对着基类看下去。
终于看到了久违的 DbSet
我们发现了最后的 DbCotext 定义的都是用户相关的 DbSet。
所以,当你在使用 ApplicationDbContext
时,你就可以对用户和角色以及相关的 DbSet 进行操作了。
重点在 Startup.cs
主要关注的是第二个部分,通过调用的方法,我们看到了 AddDefaultIdentity<IdentityUser>
这个注入方式,这里面主要是对默认的类型进行注入服务,主要是包括了 UserManager
和 RoleManager
这两个类型,当然还有它们所需要的注入,请看下图:
这些在 UserManager
里的构造方法的参数,都需要注入相关服务,也是在 AddDefaultIdentity
里添加的,当然后期会详细说明。
再回来说下一个 AddDefaultUI
,这个是干什么呢?还记得我们一开始说的吗?从 Core2.1+ 开始,微软把账号管理封装起来了,有兴趣可以自己去看源码。Github 源码地址:https://github.com/aspnet/Identity/tree/master/src/UI
当然,这里也有注释,告诉你怎么使用。
Adds a default, self-contained UI for Identity to the application using Razor Pages in an area named Identity.
翻译一下:添加默认的,包含了相关的 Razor 页面并放在了 area
下,命名为 Idenntity。
还记得 Mvc 的 Area(区域)的概念吧?这个默认的 UI 在区域下,叫 Identity。
在言论处,微软告诉你的注意事项
In order to use the default UI, the application must be using Microsoft.AspNetCore.Mvc, Microsoft.AspNetCore.StaticFiles and contain a _LoginPartial partial view that can be found by the application.
意思是:如果要启用默认 UI,你的应用程序必须使用 Mvc 和
StaticFiles
这个中间件,并且还要包含一个_LoginPartial
这个分布视图。
根据上面的言论,我们可以在生成好的代码里,找找有没有提到的内容。
出于好奇,我们看看这个 _LoginPartial.cshtml
到底是个何方神圣.
其实就是一个判断,IsSignedIn
判断用户是否的登录,登录了就显示名字,没登录当然就显示【注册】【登录】这两个超链接咯。
如何开始使用
通过在构造函数中获取注入的服务就可以了。分别有三个:
- UserManager
- RoleManager
- SignInManager
通过名称就能知道,UserManager
是对用户进行管理;RoleManager
则是针对角色;SignInManager
则是对登录和认证进行管理的。
具体的用法会在以后的章节继续说明,我这里就贴一小段示例代码来结束本章节的内容,也算是你入门了。
private readonly UserManager<IdentityUser> _userManageer;
public HomeController(UserManager<IdentityUser> userManager)
{
_userManageer = userManager;
}
/// <summary>
/// 用 ajax 请求创建一个用户。
/// </summary>
/// <param name="userName">用户名。</param>
/// <param name="password">密码。</param>
[HttpPost]
public async Task<IActionResult> CreateUserAsync(string userName, string password)
{
var result = await _userManageer.CreateAsync(new IdentityUser { UserName = userName }, password);
if (result.Succeeded)
{
return Json("创建成功");
}
return BadRequest(result.Errors);
}