定制Asp.net Core Identity
分类: Asp.net Core认证和授权 ◆ 标签: #Asp.Net core基础 #认证 #.Net ◆ 发布于: 2023-05-27 18:30:23

我们继续学习如何对Identity进行定制,以适合我们的需要。
Identity的UI定制
由于ASP.net Core的Identity库是以RCL库的形式发布的,因此我们需要对UI进行定制的话,我们首先需要覆盖Identity自带的所有的页面,请参考文章 使用脚手架工具覆盖所有的文件,然后你可以在目录Area/Identity下找到所有的文件,根据自己的需要进行UI的更改就可以了,同时注意在使用脚手架工具时选择自己项目中的模板所在的位置:
红线1是选择自己项目的模板位置,红线2是选择覆盖RCL的所有模板,然后你可以根据需要更改这些模板。
同时还需要注意阻止Identity附带的静态资源文件不要自动载入,通过如下的方式达到如下目的(防止Identity的资源文件载入代表你可以使用自己的资源文件对UI进行更改,例如CSS, JS等), 请在项目文件中使用如下的配置,达到阻止静态资源文件载入:
<PropertyGroup>
<ResolveStaticWebAssetsInputsDependsOnRemoveIdentityAssets</ResolveStaticWebAssetsInputsDependsOn>
</PropertyGroup>
<TargetName="RemoveIdentityAssets">
<ItemGroup>
<StaticWebAssetRemove="@(StaticWebAsset)" Condition="%(SourceId) =='Microsoft.AspNetCore.Identity.UI'" />
</ItemGroup>
</Target>
Identity的数据库表和数据库表结构
我们知道Identity默认是使用SQL Server数据库的,也可以使用SQL Lite或者MySQL数据库,数据库可以选择不同的数据库,但是所生成的数据库表都是一样的,如下是生成的数据库表列表:
每个表之间的关系是:
一个用户可以有多个用户声明(UserClaim),一对多
一个用户可以有多个用户登录, 一对多。
一个用户可以多个token, 一对多。
一个用户可以有多个角色,多对多。
一个角色可以有多个用户, 多对多。
一个角色可以多个角色声明,一对多。
默认情况下Identity 生成多个模型类,对应上面的每个类都会以Identity作为前缀,例如IdentityUser, IdentityRole等等。
同时默认Identity也在DbContent定义相应的数据库对应关系,例如:
自定义用户数据
通过上述的介绍,自定义用户的数据非常容易,只需要定义一个用户类,同时该类继承自IdentityUser就可以了,例如:
CustomTag就是自定义用户的数据了,同时如果你想用户可以自动删除该数,你需要使用如下的形式来定义:
使用[PersonalData]属性
定义了用户数据之后,然后更改DbContext的定义:
更改用户数据的主键类型
Identity允许更改用户数据的主键类型,可以使用如下的形式:
更改表或者列的名字
默认情况下Identity生成的表都是类似这种形式:AspNetUser, 或者AspNetRole等等形式,不好看,你完全可以更改表名或者列名,只需要自定义一个DBContext,并且从IdentityDBContext继承,然后在方法:OnModelCreating中进行更改,例如:
需要注意必须先调用base.OnModelCreating(modelBuilder);
更改列名: