 b24beb3154
			
		
	
	
		b24beb3154
		
	
	
	
	
		
			
			This commit integrates ASP.NET Core Identity into the application to enable user registration, login, and management. This lays the groundwork for securing data per user.
**Key Changes:**
*   **DbContext Configuration:**
    *   Modified `ApplicationDbContext.cs` to inherit from `IdentityDbContext<IdentityUser>`.
    *   Removed an unnecessary `using` statement from `ApplicationDbContext.cs`.
*   **Program.cs Setup:**
    *   Configured `AddDefaultIdentity<IdentityUser>` with `AddEntityFrameworkStores<ApplicationDbContext>()` to register Identity services.
    *   Ensured correct ordering of `UseAuthentication()` and `UseAuthorization()` middleware.
    *   Added `app.MapRazorPages()` to enable the Identity UI pages.
    *   Verified core package versions in `turf_tasker.csproj` for consistency across EF Core and Identity components (`8.0.6`).
*   **Identity UI:**
    *   Scaffolded ASP.NET Core Identity pages (Login, Register, Manage, etc.) to provide the user interface for authentication.
    *   Added a `_LoginPartial.cshtml` partial view to the `Views/Shared` folder.
    *   Rendered `_LoginPartial` in `Views/Shared/_Layout.cshtml` to display login/register/logout links in the navigation bar.
*   **Migrations:**
    *   Created and applied a new migration (`AddIdentitySchema`) to create the necessary ASP.NET Core Identity database tables (e.g., `AspNetUsers`, `AspNetRoles`).
		
	
			
		
			
				
	
	
		
			222 lines
		
	
	
	
		
			9.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			222 lines
		
	
	
	
		
			9.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using Microsoft.EntityFrameworkCore.Migrations;
 | |
| 
 | |
| #nullable disable
 | |
| 
 | |
| namespace turf_tasker.Migrations
 | |
| {
 | |
|     /// <inheritdoc />
 | |
|     public partial class AddIdentitySchema : Migration
 | |
|     {
 | |
|         /// <inheritdoc />
 | |
|         protected override void Up(MigrationBuilder migrationBuilder)
 | |
|         {
 | |
|             migrationBuilder.CreateTable(
 | |
|                 name: "AspNetRoles",
 | |
|                 columns: table => new
 | |
|                 {
 | |
|                     Id = table.Column<string>(type: "TEXT", nullable: false),
 | |
|                     Name = table.Column<string>(type: "TEXT", maxLength: 256, nullable: true),
 | |
|                     NormalizedName = table.Column<string>(type: "TEXT", maxLength: 256, nullable: true),
 | |
|                     ConcurrencyStamp = table.Column<string>(type: "TEXT", nullable: true)
 | |
|                 },
 | |
|                 constraints: table =>
 | |
|                 {
 | |
|                     table.PrimaryKey("PK_AspNetRoles", x => x.Id);
 | |
|                 });
 | |
| 
 | |
|             migrationBuilder.CreateTable(
 | |
|                 name: "AspNetUsers",
 | |
|                 columns: table => new
 | |
|                 {
 | |
|                     Id = table.Column<string>(type: "TEXT", nullable: false),
 | |
|                     UserName = table.Column<string>(type: "TEXT", maxLength: 256, nullable: true),
 | |
|                     NormalizedUserName = table.Column<string>(type: "TEXT", maxLength: 256, nullable: true),
 | |
|                     Email = table.Column<string>(type: "TEXT", maxLength: 256, nullable: true),
 | |
|                     NormalizedEmail = table.Column<string>(type: "TEXT", maxLength: 256, nullable: true),
 | |
|                     EmailConfirmed = table.Column<bool>(type: "INTEGER", nullable: false),
 | |
|                     PasswordHash = table.Column<string>(type: "TEXT", nullable: true),
 | |
|                     SecurityStamp = table.Column<string>(type: "TEXT", nullable: true),
 | |
|                     ConcurrencyStamp = table.Column<string>(type: "TEXT", nullable: true),
 | |
|                     PhoneNumber = table.Column<string>(type: "TEXT", nullable: true),
 | |
|                     PhoneNumberConfirmed = table.Column<bool>(type: "INTEGER", nullable: false),
 | |
|                     TwoFactorEnabled = table.Column<bool>(type: "INTEGER", nullable: false),
 | |
|                     LockoutEnd = table.Column<DateTimeOffset>(type: "TEXT", nullable: true),
 | |
|                     LockoutEnabled = table.Column<bool>(type: "INTEGER", nullable: false),
 | |
|                     AccessFailedCount = table.Column<int>(type: "INTEGER", nullable: false)
 | |
|                 },
 | |
|                 constraints: table =>
 | |
|                 {
 | |
|                     table.PrimaryKey("PK_AspNetUsers", x => x.Id);
 | |
|                 });
 | |
| 
 | |
|             migrationBuilder.CreateTable(
 | |
|                 name: "AspNetRoleClaims",
 | |
|                 columns: table => new
 | |
|                 {
 | |
|                     Id = table.Column<int>(type: "INTEGER", nullable: false)
 | |
|                         .Annotation("Sqlite:Autoincrement", true),
 | |
|                     RoleId = table.Column<string>(type: "TEXT", nullable: false),
 | |
|                     ClaimType = table.Column<string>(type: "TEXT", nullable: true),
 | |
|                     ClaimValue = table.Column<string>(type: "TEXT", nullable: true)
 | |
|                 },
 | |
|                 constraints: table =>
 | |
|                 {
 | |
|                     table.PrimaryKey("PK_AspNetRoleClaims", x => x.Id);
 | |
|                     table.ForeignKey(
 | |
|                         name: "FK_AspNetRoleClaims_AspNetRoles_RoleId",
 | |
|                         column: x => x.RoleId,
 | |
|                         principalTable: "AspNetRoles",
 | |
|                         principalColumn: "Id",
 | |
|                         onDelete: ReferentialAction.Cascade);
 | |
|                 });
 | |
| 
 | |
|             migrationBuilder.CreateTable(
 | |
|                 name: "AspNetUserClaims",
 | |
|                 columns: table => new
 | |
|                 {
 | |
|                     Id = table.Column<int>(type: "INTEGER", nullable: false)
 | |
|                         .Annotation("Sqlite:Autoincrement", true),
 | |
|                     UserId = table.Column<string>(type: "TEXT", nullable: false),
 | |
|                     ClaimType = table.Column<string>(type: "TEXT", nullable: true),
 | |
|                     ClaimValue = table.Column<string>(type: "TEXT", nullable: true)
 | |
|                 },
 | |
|                 constraints: table =>
 | |
|                 {
 | |
|                     table.PrimaryKey("PK_AspNetUserClaims", x => x.Id);
 | |
|                     table.ForeignKey(
 | |
|                         name: "FK_AspNetUserClaims_AspNetUsers_UserId",
 | |
|                         column: x => x.UserId,
 | |
|                         principalTable: "AspNetUsers",
 | |
|                         principalColumn: "Id",
 | |
|                         onDelete: ReferentialAction.Cascade);
 | |
|                 });
 | |
| 
 | |
|             migrationBuilder.CreateTable(
 | |
|                 name: "AspNetUserLogins",
 | |
|                 columns: table => new
 | |
|                 {
 | |
|                     LoginProvider = table.Column<string>(type: "TEXT", maxLength: 128, nullable: false),
 | |
|                     ProviderKey = table.Column<string>(type: "TEXT", maxLength: 128, nullable: false),
 | |
|                     ProviderDisplayName = table.Column<string>(type: "TEXT", nullable: true),
 | |
|                     UserId = table.Column<string>(type: "TEXT", nullable: false)
 | |
|                 },
 | |
|                 constraints: table =>
 | |
|                 {
 | |
|                     table.PrimaryKey("PK_AspNetUserLogins", x => new { x.LoginProvider, x.ProviderKey });
 | |
|                     table.ForeignKey(
 | |
|                         name: "FK_AspNetUserLogins_AspNetUsers_UserId",
 | |
|                         column: x => x.UserId,
 | |
|                         principalTable: "AspNetUsers",
 | |
|                         principalColumn: "Id",
 | |
|                         onDelete: ReferentialAction.Cascade);
 | |
|                 });
 | |
| 
 | |
|             migrationBuilder.CreateTable(
 | |
|                 name: "AspNetUserRoles",
 | |
|                 columns: table => new
 | |
|                 {
 | |
|                     UserId = table.Column<string>(type: "TEXT", nullable: false),
 | |
|                     RoleId = table.Column<string>(type: "TEXT", nullable: false)
 | |
|                 },
 | |
|                 constraints: table =>
 | |
|                 {
 | |
|                     table.PrimaryKey("PK_AspNetUserRoles", x => new { x.UserId, x.RoleId });
 | |
|                     table.ForeignKey(
 | |
|                         name: "FK_AspNetUserRoles_AspNetRoles_RoleId",
 | |
|                         column: x => x.RoleId,
 | |
|                         principalTable: "AspNetRoles",
 | |
|                         principalColumn: "Id",
 | |
|                         onDelete: ReferentialAction.Cascade);
 | |
|                     table.ForeignKey(
 | |
|                         name: "FK_AspNetUserRoles_AspNetUsers_UserId",
 | |
|                         column: x => x.UserId,
 | |
|                         principalTable: "AspNetUsers",
 | |
|                         principalColumn: "Id",
 | |
|                         onDelete: ReferentialAction.Cascade);
 | |
|                 });
 | |
| 
 | |
|             migrationBuilder.CreateTable(
 | |
|                 name: "AspNetUserTokens",
 | |
|                 columns: table => new
 | |
|                 {
 | |
|                     UserId = table.Column<string>(type: "TEXT", nullable: false),
 | |
|                     LoginProvider = table.Column<string>(type: "TEXT", maxLength: 128, nullable: false),
 | |
|                     Name = table.Column<string>(type: "TEXT", maxLength: 128, nullable: false),
 | |
|                     Value = table.Column<string>(type: "TEXT", nullable: true)
 | |
|                 },
 | |
|                 constraints: table =>
 | |
|                 {
 | |
|                     table.PrimaryKey("PK_AspNetUserTokens", x => new { x.UserId, x.LoginProvider, x.Name });
 | |
|                     table.ForeignKey(
 | |
|                         name: "FK_AspNetUserTokens_AspNetUsers_UserId",
 | |
|                         column: x => x.UserId,
 | |
|                         principalTable: "AspNetUsers",
 | |
|                         principalColumn: "Id",
 | |
|                         onDelete: ReferentialAction.Cascade);
 | |
|                 });
 | |
| 
 | |
|             migrationBuilder.CreateIndex(
 | |
|                 name: "IX_AspNetRoleClaims_RoleId",
 | |
|                 table: "AspNetRoleClaims",
 | |
|                 column: "RoleId");
 | |
| 
 | |
|             migrationBuilder.CreateIndex(
 | |
|                 name: "RoleNameIndex",
 | |
|                 table: "AspNetRoles",
 | |
|                 column: "NormalizedName",
 | |
|                 unique: true);
 | |
| 
 | |
|             migrationBuilder.CreateIndex(
 | |
|                 name: "IX_AspNetUserClaims_UserId",
 | |
|                 table: "AspNetUserClaims",
 | |
|                 column: "UserId");
 | |
| 
 | |
|             migrationBuilder.CreateIndex(
 | |
|                 name: "IX_AspNetUserLogins_UserId",
 | |
|                 table: "AspNetUserLogins",
 | |
|                 column: "UserId");
 | |
| 
 | |
|             migrationBuilder.CreateIndex(
 | |
|                 name: "IX_AspNetUserRoles_RoleId",
 | |
|                 table: "AspNetUserRoles",
 | |
|                 column: "RoleId");
 | |
| 
 | |
|             migrationBuilder.CreateIndex(
 | |
|                 name: "EmailIndex",
 | |
|                 table: "AspNetUsers",
 | |
|                 column: "NormalizedEmail");
 | |
| 
 | |
|             migrationBuilder.CreateIndex(
 | |
|                 name: "UserNameIndex",
 | |
|                 table: "AspNetUsers",
 | |
|                 column: "NormalizedUserName",
 | |
|                 unique: true);
 | |
|         }
 | |
| 
 | |
|         /// <inheritdoc />
 | |
|         protected override void Down(MigrationBuilder migrationBuilder)
 | |
|         {
 | |
|             migrationBuilder.DropTable(
 | |
|                 name: "AspNetRoleClaims");
 | |
| 
 | |
|             migrationBuilder.DropTable(
 | |
|                 name: "AspNetUserClaims");
 | |
| 
 | |
|             migrationBuilder.DropTable(
 | |
|                 name: "AspNetUserLogins");
 | |
| 
 | |
|             migrationBuilder.DropTable(
 | |
|                 name: "AspNetUserRoles");
 | |
| 
 | |
|             migrationBuilder.DropTable(
 | |
|                 name: "AspNetUserTokens");
 | |
| 
 | |
|             migrationBuilder.DropTable(
 | |
|                 name: "AspNetRoles");
 | |
| 
 | |
|             migrationBuilder.DropTable(
 | |
|                 name: "AspNetUsers");
 | |
|         }
 | |
|     }
 | |
| }
 |