ASP.NET Core Identity:设置 Web 项目和 Identity 数据库






3.26/5 (9投票s)
设置项目和数据库
引言
在之前的文章中,我尝试解释了 ASP.NET Core Identity 的工作原理。在这一步,我们将创建项目和数据库来使用 ASP.NET Core Identity。我们将从一个空项目开始,并逐步在该项目上构建功能。
- ASP.NET Core Identity:入门
- ASP.NET Core Identity:设置 Web 项目和 Identity 数据库
- ASP.NET Core Identity:使用 ASP.NET Core MVC 实现用户注册、登录和注销功能
- ASP.NET Core Identity:支持用于用户身份验证的 JWT Token
- Angular 4:使用 JWT Token 进行用户身份验证
- ASP.NET Core Identity:支持来自外部提供程序的 OAuth 2.0 凭据
- Angular 4:使用外部提供程序进行用户身份验证
设置 Web 项目和 Identity 数据库
本文的代码可在本仓库的 Demo 1 文件夹中找到 - https://github.com/ra1han/aspnet-core-identity。
创建项目
本文基于 ASP.NET Core 2.0 和 Visual Studio 15.4.3。较低版本的 Visual Studio 可能没有正确的项目模板,因此请确保您拥有正确版本的 Visual Studio。
在 Visual Studio 中,让我们使用 Empty 项目模板创建一个 ASP.NET Core 2.0 Web 项目。我们希望从头开始,以便完全理解 ASP.NET Core Identity 的工作原理。
空项目的内容不多。需要了解的关键是:
- Program.cs - 此文件中的代码基本上定义了 Web 服务器和启动类。
- Startup.cs - 我们在此类中定义请求处理管道并配置服务。
ConfigureServices
方法用于配置应用程序中使用的各种服务,如 Entity Framework、Identity 等。
public void ConfigureServices(IServiceCollection services)
{
}
Configure
方法用于使用中间件配置请求处理管道。
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.Run(async (context) =>
{
await context.Response.WriteAsync("Hello World!");
});
}
随着文章的进展,我们将对这两个方法进行更改。
ASP.NET Core 2.0 的另一个有趣之处在于,它拥有 .csproj 文件而不是 project.json 文件。您可以通过右键单击“解决方案资源管理器”中的项目节点并选择 Edit (ProjectName).csproj 来打开 .csproj 文件。
如果我们打开 .csproj 文件,会发现它引用了 Microsoft.AspNetCore.All
元包。ASP.NET Core 2.x 和 Entity Framework Core 2.x 所需的所有 nuget 包都包含在 Microsoft.AspNetCore.All
包中。
准备模型
Microsoft.AspNetCore.Identity 命名空间
为用户管理定义了以下模型:
IdentityUser
IdentityRole
IdentityUserRole
IdentityUserClaim
IdentityUserLogin
IdentityUserToken
IdentityRoleClaim
我们可以在我们的应用程序中直接使用这些类(在大多数情况下都会这样做)。但我们也可以定义自己的类并继承它们。让我们扩展 IdentityUser
类,并在此模型中添加名字和姓氏。
为此,让我们在解决方案中添加一个 Models 文件夹。添加一个名为 ApplicationUser
的类,它继承自 IdentityUser
。
public class ApplicationUser : IdentityUser
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
准备 Entity Framework
在开始下一步之前,我们将向解决方案添加一个 appsettings.json 文件。默认情况下,它会添加一个如下所示的连接字符串:
{
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\MSSQLLocalDB;
Database=_CHANGE_ME;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}
让我们将数据库名称从 "_CHANGE_ME
" 更改为 "IdentityDemo
" 或其他更有意义的名称。
准备 Entity Framework
ASP.NET Core Identity 附带 Entity Framework Core Identity 包,该包有一个 EF Core 实现,用于将用户信息存储在 SQL Server 数据库中。
Microsoft.AspNetCore.Identity.EntityFrameworkCore 命名空间
实现了 IdentityDbContext<TUser>
,它继承自 DbContext
。此类为所有 Identity 模型提供了现成的 DbSet
。
因此,我们可以创建继承自 IdentityDbContext<ApplicationUser>
的 ApplicationDbContext
。
让我们向解决方案添加一个名为 Data 的文件夹,并将 ApplicationDbContext
类添加到该文件夹中。
public class ApplicationDbContext : IdentityDbContext<applicationuser>
{
public ApplicationDbContext(DbContextOptions<applicationdbcontext> options)
: base(options)
{
}
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
}
}
准备服务和中间件
在上一步中,我们似乎没有在 ApplicationDbContext
类中使用任何连接字符串。相反,我们通过依赖注入注入了 DbContextOptions
。请记住,我们必须在 Startup
类的 ConfigureServices
方法中配置此项。
我们必须做的另一件重要事情是配置与 ASP.NET Core Identity 相关的服务以进行依赖注入。最终的 ConfigureServices
方法将如下所示:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<applicationdbcontext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<applicationuser, identityrole="">()
.AddEntityFrameworkStores<applicationdbcontext>()
.AddDefaultTokenProviders();
}
最后,我们必须将 Identity 添加到请求管道。为此,我们在 Configure
方法的末尾添加以下行:
app.UseAuthentication();
此行将身份验证中间件添加到请求管道。
准备迁移和数据库
要使用 EF Core 创建数据库,我们需要迁移。为此,请安装以下包:
Install-package Microsoft.EntityFrameworkCore.Tools
确保 .csproj 文件如下所示:
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.0.0" />
<DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" />
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.0.1" />
</ItemGroup>
现在,要创建一个名为 "initial
" 的迁移,请在 .csproj 文件所在的文件夹中,在 cmd 中运行以下命令:
dotnet ef migrations add Initial
现在,运行以下命令创建数据库:
dotnet ef database update
现在,如果您打开数据库,您将看到数据库已根据连接字符串中提到的名称创建。数据库将如下所示:
因此,我们已经在空项目中从头开始配置了 Identity,并且还创建了数据库。在下一篇文章中,我们将看到如何在 MVC 项目中使用它。