Skip to main content

定制Asp.net Core Identity

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

我们继续学习如何对Identity进行定制,以适合我们的需要。

IdentityUI定制

由于ASP.net CoreIdentity库是以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); 

更改列名: