↓引荐关注↓ 前言 在本章,我们将学习如何定制ASP.NET Core认证机制。微软把保险认证当做ASP.NET Core框架的一部分,足以看见它是应用程序十分最重要的内容。 在文将引见如何定制ASP.NET Core认证UI的基本完成,以及如何向IdentityUser添加自定义信息。 我们将引见以下几点:
技术准备 创建一个ASP.NET Core应用程序并用VS Code翻开: dotnetnewmvc-nAuthSample-oAuthSample--authIndividual cdAuthSample code. ASP.NET Core身份认证引见 用户身份是表示用户对象,也能够是用户组。经过它我们能够了解用户及其所属的权限。能够给身份或者叫用户分配包含权限的角色。例如,能够给一个名为仓库管理员的角色只分配写入的权限。用户身份也能够嵌套。一个用户能够是一个组的一部分,一个组能够是另一个组的一部分,依此类推。 ASP.NET Core Identity是一个框架,它在.NET中用来存储和读取用户信息。该框架还提供了添加登录表单、注册表单、会话处置等机制。它还提供以加密战争安的方式存储凭据。ASP.NET Core Identity还提供了多种考证用户身份的措施:
上面命令行里的--auth标记设置为Individual,用于启用个人身份考证,并创建ASP.NET Core MVC应用程序。这意味着它附带了一个数据库来存储用户。--auth标记会添加一切相关的代码和依赖项。 --auth标记创建了一个名为Identity的区域,其中包含_ViewStart.cshtml文件,它援用新项目的_Layout.cshtml文件。实践的登录或注册界面在援用此项目的类库中提供。 该案例项目包含一个Data文件夹,其中包含EF Core的DbContext,以及用于创建和更新的数据库迁移。 除了Program.cs外,一切其他部分常规MVC应用完整相同。 假如您运用.NET CLI创建了应用程序,默许则会运用SQLite数据库。假如运用Visual Studio创建此应用程序,则会运用SQL Server存储用户数据。 在启动应用程序之前,在终端中调用以下命令创建和更新数据库: dotnet ef database update 假如不起作用,您可能需求首先在.NET CLI中装置实体框架工具: dotnet tool install -g dotnet-ef 然后执行:dotnet watch应用程序往常将在监视方式下启动,并启用热重新加载。它还将翻开阅读器窗口并调用应用程序: 如您所见,右上方有一个菜单,其中包含此应用程序的“注册”和“登录”选项。单击登录链接可进入以下登录屏幕: 如上所述,该视图来自一个已编译的Razor库,它为Identity区域提供了必要的视图。我们会自动从框架中获取此UI。 最后,我们快速了解一下Program.cs,这也与我们在上一章中看到的文件不同。 在注册效劳的上部,有几行代码用于注册DbContext以及数据库异常页: varconnectionString = builder. Configuration. GetConnectionString( "DefaultConnection"); builder. Services. AddDbContext< ApplicationDbContext>(options => options. UseSqlite(connectionString)); builder. Services. AddDatabaseDeveloperPageExceptionFilter; builder. Services. AddDefaultIdentity< IdentityUser>(options => options. SignIn. RequireConfirmedAccount= true) . AddEntityFrameworkStores< ApplicationDbContext>; 还有添加身份认证的EntityFramework Core的注册。它被配置为只允许确认的帐户,这意味着:作为用户需求确认电子邮件才干登录。在中间件的下部,我们看到运用了身份考证和受权: app.UseAuthentication; app.UseAuthorization; 自定义IdentityUser IdentityUser具有以下字段:Id、用户名、密码、电子邮件和电话号码。由于显现称号可能与用户名不同,我们会添加Name属性,另外,假定我们想向用户发送华诞祝福,我们应该如何扩展他们的出华诞期呢?为此,需求添加一个名为WebAppUser.cs的文件到Data文件夹中: usingMicrosoft.AspNetCore.Identity; namespaceAuthSample.Data; publicclassWebAppUser: IdentityUser{ [ PersonalData] publicstring? Name { get; set; } [ PersonalData] publicDateTime DOB { get; set; } } 如上所示,WebAppUser.cs派生自IdentityUser,并扩展两个属性。在Program.cs,我们需求修正效劳注册以运用新的WebAppUser: builder.Services.AddDefaultIdentity<WebAppUser>我们还需求更改DbContext,运用WebAppUser: publicclassApplicationDbContext: IdentityDbContext< WebAppUser, IdentityRole, string> 您还需求将using语句添加到Microsoft.AspNetCore.Identity中。这是第一步。我们往常需求更新数据库: dotnet ef migrations add CustomUserData dotnet ef database update 一旦运用自定义属性扩展了IdentityUser,就能够在在ASP.NET Core Identity U的用户配置文件中运用它。 自定义Identity视图(views) ASP.NET Core Identity视图来自编译的Razor库,我们应该如何自定义呢?我们只需求在Area内的预定义文件夹结构中用自定义视图掩盖给定视图即可。前提是我们需求先创建一个自定义视图,添加扩展字段或更改规划。如前所述,项目中曾经有一个名为Identity的Area,内有一个Pages文件夹。在这里,我们需求创建一个名为Account的新文件夹,然后放置一个名为“注册”的新Register.cshtml页面在这个文件夹中,并将以下内容放在里面,以查看视图的掩盖能否有效:@page @{ } <h1>Hello Register Form</h1> 运转应用程序并单击左上角的注册,您将看到以下页面: 实践上,我们不需求自己掩盖视图。有一个代码生成器可用于构建您想要掩盖的视图。经过调用以下命令装置代码生成器:dotnet tool install -g dotnet-aspnet-codegenerator假如尚未完成,您还需求在项目中装置以下软件包: dotnet addpackage Microsoft.VisualStudio.Web.CodeGeneration.Design dotnet addpackage Microsoft.EntityFrameworkCore.Design dotnet addpackage Microsoft.AspNetCore.Identity.EntityFrameworkCore dotnet addpackage Microsoft.AspNetCore.Identity.UI dotnet addpackage Microsoft.EntityFrameworkCore.SqlServer dotnet addpackage Microsoft.EntityFrameworkCore.Tools 要了解代码生成器能够做什么,请运转以下命令:dotnet aspnet-codegenerator identity -h第一个更改是让用户在注册页面上填写name属性,我们先构建注册页面: dotnet aspnet-codegenerator identity -dc AuthSample.Data.ApplicationDbContext --files "Account.Register" -sqlite 此命令通知代码生成器运用现有的ApplicationDbContext和Sqlite。假如不指定此项,它将创建一个新的DbContext或注册现有的DbContext,以便与SQLServer而不是SQLite一同运用。 假如一切都OK了,代码生成器应该只添加Register.cshtml页面以及一些基础结构文件: 代码生成器还会知道项目正在运用自定义WebAppUser而不是IdentityUser,这意味着在生成的代码中运用了WebAppUser。往常,我们更改一下Register.cshtml,将显现称号添加到表单中。在第15行电子邮件字段的表单元素之前添加以下行: < divclass= "form-floating"> < inputasp-for= "Input.Name"class= "form-control"autocomplete= "name"aria-required= "true"/> < labelasp-for= "Input.Name"></ label> < spanasp-validation-for= "Input.Name"class= "text-danger"></ span> </ div> 此外,Regiser.cshtml.cs需求更改。ImportModel类需求Name属性: publicclassInputModel{ [ Required] [ Display(Name = "Display name") ] publicstringName { get; set; } 在PostAsync措施中,将Name属性分配给新创建的用户: var user = CreateUser; user.Name = Input.Name; 启动申请后,您将看到以下注册表格: 由于用户可能需求更新称号,我们还需求更改配置文件页面上的视图。这里还需求添加出华诞期: dotnet aspnet-codegenerator identity -dc AuthSample.Data.ApplicationDbContext --files "Account.Manage.Index" -sqlite 翻开新创建的Index.chtml.cs,并将以下属性放在InputModel类中: publicclassInputModel{ [ Required] [ Display(Name = "Display name") ] publicstringName { get; set; } [ Display(Name = "Date of birth") ] publicDateTime DOB { get; set; } } 往常能够在相应的Index.chtml中运用这些属性。下面代码片段需求放在考证和用户名之间: < divclass= "form-floating"> < inputasp-for= "Input.Name"class= "form-control"autocomplete= "name"aria-required= "true"/> < labelasp-for= "Input.Name"></ label> < spanasp-validation-for= "Input.Name"class= "text-danger"> </ span> </ div> < divclass= "form-floating"> < inputasp-for= "Input.DOB"class= "form-control"type= "date"/> < labelasp-for= "Input.DOB"class= "form-label"></ label> </ div> 最后,还需求一些更改才干用保存的数据填充表单。在LoadAsync措施中,需求运用新属性扩展InputModel的实例化: Input = new InputModel { PhoneNumber = phoneNumber, Name = user.Name, DOB = user.DOB }; 用户保存表单时,还需求保存更改的值。将下一个代码段放在OnPostAsync措施中: user.Name = Input.Name; user.DOB = Input.DOB; await _userManager.UpdateAsync( user); 将InputModel的值设置为WebAppUser属性,并将更改保存在数据库中。我们在终端中调用dotnet watch来尝试一下。Profile页面往常看起来相似于: 您往常能够更改显现称号并添加出华诞期。假如用户填写了显现称号,他们可能会在登录后在左上角显现。翻开Views/Shared文件夹的_LoginPartial.cshtml,并将前四行交流为以下代码段: @using Microsoft. AspNetCore. Identity @using AuthSample. Data @inject SignInManager< WebAppUser> SignInManager @inject UserManager< WebAppUser> UserManager @{ varuser = await @ UserManager. GetUserAsync( User); } 做using部分,将SignInManager和UserManager的泛型参数从IdentityUser类型更改为WebAppUser。在代码块部分,经过传入当前用户,经过UserManager加载当前WebAppUser。 往常,需求更改用户名的输出以写入显现称号:Hello @user?.Name! 当dotnet watch仍在运转时,阅读器中运转的应用程序应该曾经更新。或许你需求重新登录。往常,您应该会在右上角看到显现称号: 总结 在本章中,我们学习了如何扩展ASP.NET Core Identity,经过添加其他属性来增强用户对象。我们还学习了如何增强Identity UI以加载、保存和更新新用户属性的值。
- EOF - 点击题目可跳转 .N ET 应用开发之 SQL Server 常见问题剖析 .NET 6.0 小学问之项目插件编写 ASP.NET Core 6.0 中 MediatR 的应用CQRS 看完本文有收获?请转发分享给更多人 引荐关注「DotNet」,提升.Net技艺 点赞和在看就是最大的支持 |