From 49a1f660c360f146e109bc739df61c2c1dd812d9 Mon Sep 17 00:00:00 2001 From: Dimitar Todorov <36155679+thermalthrottle@users.noreply.github.com> Date: Tue, 5 Apr 2022 20:01:57 +0300 Subject: [PATCH] Fixed Seed User Login --- RentACar/Data/Data/RentACarDbContext.cs | 56 ++- ....cs => 20220405155900_Migrena.Designer.cs} | 45 +- ...8_Changes.cs => 20220405155900_Migrena.cs} | 27 +- .../20220405162441_Migrena1.Designer.cs | 399 ++++++++++++++++++ .../Migrations/20220405162441_Migrena1.cs | 113 +++++ .../RentACarDbContextModelSnapshot.cs | 42 ++ .../Areas/Identity/Pages/Account/Login.cshtml | 6 +- .../Identity/Pages/Account/Login.cshtml.cs | 12 +- .../Identity/Pages/Account/Register.cshtml | 21 +- .../Identity/Pages/Account/Register.cshtml.cs | 16 +- RentACar/WebApp/Controllers/HomeController.cs | 1 + RentACar/WebApp/Views/Shared/_Layout.cshtml | 6 +- .../WebApp/Views/Shared/_LoginPartial.cshtml | 2 +- 13 files changed, 699 insertions(+), 47 deletions(-) rename RentACar/Data/Migrations/{20220404172708_Changes.Designer.cs => 20220405155900_Migrena.Designer.cs} (86%) rename RentACar/Data/Migrations/{20220404172708_Changes.cs => 20220405155900_Migrena.cs} (87%) create mode 100644 RentACar/Data/Migrations/20220405162441_Migrena1.Designer.cs create mode 100644 RentACar/Data/Migrations/20220405162441_Migrena1.cs diff --git a/RentACar/Data/Data/RentACarDbContext.cs b/RentACar/Data/Data/RentACarDbContext.cs index bb23c72..fc96388 100644 --- a/RentACar/Data/Data/RentACarDbContext.cs +++ b/RentACar/Data/Data/RentACarDbContext.cs @@ -24,30 +24,8 @@ namespace Data } } - protected override async void OnModelCreating(ModelBuilder modelBuilder) + protected override void OnModelCreating(ModelBuilder modelBuilder) { - - base.OnModelCreating(modelBuilder); - //string[] roles = { "Admin", "Employee" }; - - //foreach (string role in roles) - //{ - // IdentityRole roleToCheck = await this.Roles.FirstOrDefaultAsync(roleToCheck => roleToCheck.Name == role); - // if (roleToCheck == null) - // { - // //this.Roles.Add(new IdentityRole(role)); - // modelBuilder.Entity().HasData(new IdentityRole(role)); - // } - //} - - //PasswordHasher passwordHasher = new PasswordHasher(); - - //User initialUser = new User(); - //initialUser.Id = Guid.NewGuid().ToString(); - //initialUser.UserName = "admin"; - //initialUser.PasswordHash = passwordHasher.HashPassword(initialUser, "admin"); - - //if (this.Users.FirstOrDefaultAsync() != null) //{ @@ -56,15 +34,35 @@ namespace Data // modelBuilder.Entity>().HasData(new IdentityUserRole {RoleId = adminRole.Id, UserId = initialUser.Id}); //} + PasswordHasher passwordHasher = new PasswordHasher(); + + User initialUser = new User() + { + Id = Guid.NewGuid().ToString(), + UserName = "admin", + Email = "admin@admin.admin", + SecurityStamp = Guid.NewGuid().ToString() + }; + initialUser.PasswordHash = passwordHasher.HashPassword(initialUser, "admin123"); + + modelBuilder.Entity().HasData(initialUser); + string[] roles = { "Admin", "Employee" }; + + foreach (string role in roles) + { + IdentityRole newRole = new IdentityRole(role); + newRole.Id = Guid.NewGuid().ToString(); + modelBuilder.Entity().HasData(newRole); + IdentityUserRole userRole = new IdentityUserRole(); + userRole.UserId = initialUser.Id; + userRole.RoleId = newRole.Id; + modelBuilder.Entity>().HasData(userRole); + } + modelBuilder.Entity().HasOne(rents => rents.User); modelBuilder.Entity().HasOne(rents => rents.Car); - modelBuilder.Entity().HasData(new Car() - { - Id = 1, - Brand = "Trabant" - }) ; - + base.OnModelCreating(modelBuilder); } } diff --git a/RentACar/Data/Migrations/20220404172708_Changes.Designer.cs b/RentACar/Data/Migrations/20220405155900_Migrena.Designer.cs similarity index 86% rename from RentACar/Data/Migrations/20220404172708_Changes.Designer.cs rename to RentACar/Data/Migrations/20220405155900_Migrena.Designer.cs index 6f6cc10..8e04db9 100644 --- a/RentACar/Data/Migrations/20220404172708_Changes.Designer.cs +++ b/RentACar/Data/Migrations/20220405155900_Migrena.Designer.cs @@ -10,8 +10,8 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion; namespace Data.Migrations { [DbContext(typeof(RentACarDbContext))] - [Migration("20220404172708_Changes")] - partial class Changes + [Migration("20220405155900_Migrena")] + partial class Migrena { protected override void BuildTargetModel(ModelBuilder modelBuilder) { @@ -151,6 +151,21 @@ namespace Data.Migrations .HasFilter("[NormalizedUserName] IS NOT NULL"); b.ToTable("AspNetUsers"); + + b.HasData( + new + { + Id = "5ff048ba-cb37-4966-a7dd-f7b0aa96d730", + AccessFailedCount = 0, + ConcurrencyStamp = "bd3f3137-a505-4c21-9392-8cc07b1eac1e", + Email = "admin@admin.admin", + EmailConfirmed = false, + LockoutEnabled = false, + PasswordHash = "AQAAAAEAACcQAAAAEPi0dTNwbpnqCBmfVPUqx8rvTNgAcDNC+66x774qyxx0uJUru0hXcxozgjaFx/7MRw==", + PhoneNumberConfirmed = false, + TwoFactorEnabled = false, + UserName = "admin" + }); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => @@ -178,6 +193,20 @@ namespace Data.Migrations .HasFilter("[NormalizedName] IS NOT NULL"); b.ToTable("AspNetRoles"); + + b.HasData( + new + { + Id = "43cf6ddd-13bc-4680-9e88-21d5bb059012", + ConcurrencyStamp = "4add9b33-0dd3-4301-a5bf-c22d1f6be04d", + Name = "Admin" + }, + new + { + Id = "58aee2c2-eab0-4448-afde-440707d99128", + ConcurrencyStamp = "091ef9fa-ecf1-4195-b3a3-9d1989cdbc50", + Name = "Employee" + }); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => @@ -263,6 +292,18 @@ namespace Data.Migrations b.HasIndex("RoleId"); b.ToTable("AspNetUserRoles"); + + b.HasData( + new + { + UserId = "5ff048ba-cb37-4966-a7dd-f7b0aa96d730", + RoleId = "43cf6ddd-13bc-4680-9e88-21d5bb059012" + }, + new + { + UserId = "5ff048ba-cb37-4966-a7dd-f7b0aa96d730", + RoleId = "58aee2c2-eab0-4448-afde-440707d99128" + }); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => diff --git a/RentACar/Data/Migrations/20220404172708_Changes.cs b/RentACar/Data/Migrations/20220405155900_Migrena.cs similarity index 87% rename from RentACar/Data/Migrations/20220404172708_Changes.cs rename to RentACar/Data/Migrations/20220405155900_Migrena.cs index 5097a69..cde80bd 100644 --- a/RentACar/Data/Migrations/20220404172708_Changes.cs +++ b/RentACar/Data/Migrations/20220405155900_Migrena.cs @@ -3,7 +3,7 @@ using Microsoft.EntityFrameworkCore.Migrations; namespace Data.Migrations { - public partial class Changes : Migration + public partial class Migrena : Migration { protected override void Up(MigrationBuilder migrationBuilder) { @@ -201,6 +201,31 @@ namespace Data.Migrations onDelete: ReferentialAction.Cascade); }); + migrationBuilder.InsertData( + table: "AspNetRoles", + columns: new[] { "Id", "ConcurrencyStamp", "Name", "NormalizedName" }, + values: new object[] { "43cf6ddd-13bc-4680-9e88-21d5bb059012", "4add9b33-0dd3-4301-a5bf-c22d1f6be04d", "Admin", null }); + + migrationBuilder.InsertData( + table: "AspNetRoles", + columns: new[] { "Id", "ConcurrencyStamp", "Name", "NormalizedName" }, + values: new object[] { "58aee2c2-eab0-4448-afde-440707d99128", "091ef9fa-ecf1-4195-b3a3-9d1989cdbc50", "Employee", null }); + + migrationBuilder.InsertData( + table: "AspNetUsers", + columns: new[] { "Id", "AccessFailedCount", "ConcurrencyStamp", "Email", "EmailConfirmed", "FirstName", "LastName", "LockoutEnabled", "LockoutEnd", "NormalizedEmail", "NormalizedUserName", "PasswordHash", "PersonalNumber", "PhoneNumber", "PhoneNumberConfirmed", "SecurityStamp", "TwoFactorEnabled", "UserName" }, + values: new object[] { "5ff048ba-cb37-4966-a7dd-f7b0aa96d730", 0, "bd3f3137-a505-4c21-9392-8cc07b1eac1e", "admin@admin.admin", false, null, null, false, null, null, null, "AQAAAAEAACcQAAAAEPi0dTNwbpnqCBmfVPUqx8rvTNgAcDNC+66x774qyxx0uJUru0hXcxozgjaFx/7MRw==", null, null, false, null, false, "admin" }); + + migrationBuilder.InsertData( + table: "AspNetUserRoles", + columns: new[] { "RoleId", "UserId" }, + values: new object[] { "43cf6ddd-13bc-4680-9e88-21d5bb059012", "5ff048ba-cb37-4966-a7dd-f7b0aa96d730" }); + + migrationBuilder.InsertData( + table: "AspNetUserRoles", + columns: new[] { "RoleId", "UserId" }, + values: new object[] { "58aee2c2-eab0-4448-afde-440707d99128", "5ff048ba-cb37-4966-a7dd-f7b0aa96d730" }); + migrationBuilder.CreateIndex( name: "IX_AspNetRoleClaims_RoleId", table: "AspNetRoleClaims", diff --git a/RentACar/Data/Migrations/20220405162441_Migrena1.Designer.cs b/RentACar/Data/Migrations/20220405162441_Migrena1.Designer.cs new file mode 100644 index 0000000..4f80519 --- /dev/null +++ b/RentACar/Data/Migrations/20220405162441_Migrena1.Designer.cs @@ -0,0 +1,399 @@ +// +using System; +using Data; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +namespace Data.Migrations +{ + [DbContext(typeof(RentACarDbContext))] + [Migration("20220405162441_Migrena1")] + partial class Migrena1 + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("ProductVersion", "5.0.15") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("Data.Entities.Car", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("Brand") + .HasColumnType("nvarchar(max)"); + + b.Property("CountPassengerSeats") + .HasColumnType("int"); + + b.Property("Description") + .HasColumnType("nvarchar(max)"); + + b.Property("Model") + .HasColumnType("nvarchar(max)"); + + b.Property("PriceForDay") + .HasColumnType("decimal(18,2)"); + + b.Property("Year") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("Cars"); + }); + + modelBuilder.Entity("Data.Entities.Rents", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("CarId") + .HasColumnType("int"); + + b.Property("EndDate") + .HasColumnType("datetime2"); + + b.Property("StartDate") + .HasColumnType("datetime2"); + + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("CarId"); + + b.HasIndex("UserId"); + + b.ToTable("Rents"); + }); + + modelBuilder.Entity("Data.Entities.User", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("AccessFailedCount") + .HasColumnType("int"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("nvarchar(max)"); + + b.Property("Email") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("EmailConfirmed") + .HasColumnType("bit"); + + b.Property("FirstName") + .HasColumnType("nvarchar(max)"); + + b.Property("LastName") + .HasColumnType("nvarchar(max)"); + + b.Property("LockoutEnabled") + .HasColumnType("bit"); + + b.Property("LockoutEnd") + .HasColumnType("datetimeoffset"); + + b.Property("NormalizedEmail") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("NormalizedUserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("PasswordHash") + .HasColumnType("nvarchar(max)"); + + b.Property("PersonalNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumberConfirmed") + .HasColumnType("bit"); + + b.Property("SecurityStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("TwoFactorEnabled") + .HasColumnType("bit"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedEmail") + .HasDatabaseName("EmailIndex"); + + b.HasIndex("NormalizedUserName") + .IsUnique() + .HasDatabaseName("UserNameIndex") + .HasFilter("[NormalizedUserName] IS NOT NULL"); + + b.ToTable("AspNetUsers"); + + b.HasData( + new + { + Id = "b482663b-78bc-4b6a-81a6-75d52d87bbb1", + AccessFailedCount = 0, + ConcurrencyStamp = "87ad6f7e-0c13-418e-85bd-de8f713571df", + Email = "admin@admin.admin", + EmailConfirmed = false, + LockoutEnabled = false, + PasswordHash = "AQAAAAEAACcQAAAAEDziS8oqC1HTCljBTahrcu4r2yG6Jx9UQwSqWbxyBm2tmq5aKXSnajXslwuEc2AF4Q==", + PhoneNumberConfirmed = false, + SecurityStamp = "4323b9d9-b92f-4ef3-94b1-77050d61341a", + TwoFactorEnabled = false, + UserName = "admin" + }); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("NormalizedName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName") + .IsUnique() + .HasDatabaseName("RoleNameIndex") + .HasFilter("[NormalizedName] IS NOT NULL"); + + b.ToTable("AspNetRoles"); + + b.HasData( + new + { + Id = "0387a4dd-4a2a-4119-b7c9-5d5e7c16b0ed", + ConcurrencyStamp = "cb148526-d897-4dfa-966f-b67b73e16be5", + Name = "Admin" + }, + new + { + Id = "b0aacbe6-4603-4b03-b4e7-b521491bef85", + ConcurrencyStamp = "ef05edac-cedf-488c-9e99-569b0d434c10", + Name = "Employee" + }); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)"); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(max)"); + + b.Property("RoleId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetRoleClaims"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)"); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserClaims"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.Property("LoginProvider") + .HasColumnType("nvarchar(450)"); + + b.Property("ProviderKey") + .HasColumnType("nvarchar(450)"); + + b.Property("ProviderDisplayName") + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("LoginProvider", "ProviderKey"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserLogins"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.Property("RoleId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetUserRoles"); + + b.HasData( + new + { + UserId = "b482663b-78bc-4b6a-81a6-75d52d87bbb1", + RoleId = "0387a4dd-4a2a-4119-b7c9-5d5e7c16b0ed" + }, + new + { + UserId = "b482663b-78bc-4b6a-81a6-75d52d87bbb1", + RoleId = "b0aacbe6-4603-4b03-b4e7-b521491bef85" + }); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.Property("LoginProvider") + .HasColumnType("nvarchar(450)"); + + b.Property("Name") + .HasColumnType("nvarchar(450)"); + + b.Property("Value") + .HasColumnType("nvarchar(max)"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AspNetUserTokens"); + }); + + modelBuilder.Entity("Data.Entities.Rents", b => + { + b.HasOne("Data.Entities.Car", "Car") + .WithMany() + .HasForeignKey("CarId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Data.Entities.User", "User") + .WithMany() + .HasForeignKey("UserId"); + + b.Navigation("Car"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.HasOne("Data.Entities.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.HasOne("Data.Entities.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Data.Entities.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.HasOne("Data.Entities.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/RentACar/Data/Migrations/20220405162441_Migrena1.cs b/RentACar/Data/Migrations/20220405162441_Migrena1.cs new file mode 100644 index 0000000..6103574 --- /dev/null +++ b/RentACar/Data/Migrations/20220405162441_Migrena1.cs @@ -0,0 +1,113 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +namespace Data.Migrations +{ + public partial class Migrena1 : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DeleteData( + table: "AspNetUserRoles", + keyColumns: new[] { "RoleId", "UserId" }, + keyValues: new object[] { "43cf6ddd-13bc-4680-9e88-21d5bb059012", "5ff048ba-cb37-4966-a7dd-f7b0aa96d730" }); + + migrationBuilder.DeleteData( + table: "AspNetUserRoles", + keyColumns: new[] { "RoleId", "UserId" }, + keyValues: new object[] { "58aee2c2-eab0-4448-afde-440707d99128", "5ff048ba-cb37-4966-a7dd-f7b0aa96d730" }); + + migrationBuilder.DeleteData( + table: "AspNetRoles", + keyColumn: "Id", + keyValue: "43cf6ddd-13bc-4680-9e88-21d5bb059012"); + + migrationBuilder.DeleteData( + table: "AspNetRoles", + keyColumn: "Id", + keyValue: "58aee2c2-eab0-4448-afde-440707d99128"); + + migrationBuilder.DeleteData( + table: "AspNetUsers", + keyColumn: "Id", + keyValue: "5ff048ba-cb37-4966-a7dd-f7b0aa96d730"); + + migrationBuilder.InsertData( + table: "AspNetRoles", + columns: new[] { "Id", "ConcurrencyStamp", "Name", "NormalizedName" }, + values: new object[] { "0387a4dd-4a2a-4119-b7c9-5d5e7c16b0ed", "cb148526-d897-4dfa-966f-b67b73e16be5", "Admin", null }); + + migrationBuilder.InsertData( + table: "AspNetRoles", + columns: new[] { "Id", "ConcurrencyStamp", "Name", "NormalizedName" }, + values: new object[] { "b0aacbe6-4603-4b03-b4e7-b521491bef85", "ef05edac-cedf-488c-9e99-569b0d434c10", "Employee", null }); + + migrationBuilder.InsertData( + table: "AspNetUsers", + columns: new[] { "Id", "AccessFailedCount", "ConcurrencyStamp", "Email", "EmailConfirmed", "FirstName", "LastName", "LockoutEnabled", "LockoutEnd", "NormalizedEmail", "NormalizedUserName", "PasswordHash", "PersonalNumber", "PhoneNumber", "PhoneNumberConfirmed", "SecurityStamp", "TwoFactorEnabled", "UserName" }, + values: new object[] { "b482663b-78bc-4b6a-81a6-75d52d87bbb1", 0, "87ad6f7e-0c13-418e-85bd-de8f713571df", "admin@admin.admin", false, null, null, false, null, null, null, "AQAAAAEAACcQAAAAEDziS8oqC1HTCljBTahrcu4r2yG6Jx9UQwSqWbxyBm2tmq5aKXSnajXslwuEc2AF4Q==", null, null, false, "4323b9d9-b92f-4ef3-94b1-77050d61341a", false, "admin" }); + + migrationBuilder.InsertData( + table: "AspNetUserRoles", + columns: new[] { "RoleId", "UserId" }, + values: new object[] { "0387a4dd-4a2a-4119-b7c9-5d5e7c16b0ed", "b482663b-78bc-4b6a-81a6-75d52d87bbb1" }); + + migrationBuilder.InsertData( + table: "AspNetUserRoles", + columns: new[] { "RoleId", "UserId" }, + values: new object[] { "b0aacbe6-4603-4b03-b4e7-b521491bef85", "b482663b-78bc-4b6a-81a6-75d52d87bbb1" }); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DeleteData( + table: "AspNetUserRoles", + keyColumns: new[] { "RoleId", "UserId" }, + keyValues: new object[] { "0387a4dd-4a2a-4119-b7c9-5d5e7c16b0ed", "b482663b-78bc-4b6a-81a6-75d52d87bbb1" }); + + migrationBuilder.DeleteData( + table: "AspNetUserRoles", + keyColumns: new[] { "RoleId", "UserId" }, + keyValues: new object[] { "b0aacbe6-4603-4b03-b4e7-b521491bef85", "b482663b-78bc-4b6a-81a6-75d52d87bbb1" }); + + migrationBuilder.DeleteData( + table: "AspNetRoles", + keyColumn: "Id", + keyValue: "0387a4dd-4a2a-4119-b7c9-5d5e7c16b0ed"); + + migrationBuilder.DeleteData( + table: "AspNetRoles", + keyColumn: "Id", + keyValue: "b0aacbe6-4603-4b03-b4e7-b521491bef85"); + + migrationBuilder.DeleteData( + table: "AspNetUsers", + keyColumn: "Id", + keyValue: "b482663b-78bc-4b6a-81a6-75d52d87bbb1"); + + migrationBuilder.InsertData( + table: "AspNetRoles", + columns: new[] { "Id", "ConcurrencyStamp", "Name", "NormalizedName" }, + values: new object[] { "43cf6ddd-13bc-4680-9e88-21d5bb059012", "4add9b33-0dd3-4301-a5bf-c22d1f6be04d", "Admin", null }); + + migrationBuilder.InsertData( + table: "AspNetRoles", + columns: new[] { "Id", "ConcurrencyStamp", "Name", "NormalizedName" }, + values: new object[] { "58aee2c2-eab0-4448-afde-440707d99128", "091ef9fa-ecf1-4195-b3a3-9d1989cdbc50", "Employee", null }); + + migrationBuilder.InsertData( + table: "AspNetUsers", + columns: new[] { "Id", "AccessFailedCount", "ConcurrencyStamp", "Email", "EmailConfirmed", "FirstName", "LastName", "LockoutEnabled", "LockoutEnd", "NormalizedEmail", "NormalizedUserName", "PasswordHash", "PersonalNumber", "PhoneNumber", "PhoneNumberConfirmed", "SecurityStamp", "TwoFactorEnabled", "UserName" }, + values: new object[] { "5ff048ba-cb37-4966-a7dd-f7b0aa96d730", 0, "bd3f3137-a505-4c21-9392-8cc07b1eac1e", "admin@admin.admin", false, null, null, false, null, null, null, "AQAAAAEAACcQAAAAEPi0dTNwbpnqCBmfVPUqx8rvTNgAcDNC+66x774qyxx0uJUru0hXcxozgjaFx/7MRw==", null, null, false, null, false, "admin" }); + + migrationBuilder.InsertData( + table: "AspNetUserRoles", + columns: new[] { "RoleId", "UserId" }, + values: new object[] { "43cf6ddd-13bc-4680-9e88-21d5bb059012", "5ff048ba-cb37-4966-a7dd-f7b0aa96d730" }); + + migrationBuilder.InsertData( + table: "AspNetUserRoles", + columns: new[] { "RoleId", "UserId" }, + values: new object[] { "58aee2c2-eab0-4448-afde-440707d99128", "5ff048ba-cb37-4966-a7dd-f7b0aa96d730" }); + } + } +} diff --git a/RentACar/Data/Migrations/RentACarDbContextModelSnapshot.cs b/RentACar/Data/Migrations/RentACarDbContextModelSnapshot.cs index 9414400..7851ea8 100644 --- a/RentACar/Data/Migrations/RentACarDbContextModelSnapshot.cs +++ b/RentACar/Data/Migrations/RentACarDbContextModelSnapshot.cs @@ -149,6 +149,22 @@ namespace Data.Migrations .HasFilter("[NormalizedUserName] IS NOT NULL"); b.ToTable("AspNetUsers"); + + b.HasData( + new + { + Id = "b482663b-78bc-4b6a-81a6-75d52d87bbb1", + AccessFailedCount = 0, + ConcurrencyStamp = "87ad6f7e-0c13-418e-85bd-de8f713571df", + Email = "admin@admin.admin", + EmailConfirmed = false, + LockoutEnabled = false, + PasswordHash = "AQAAAAEAACcQAAAAEDziS8oqC1HTCljBTahrcu4r2yG6Jx9UQwSqWbxyBm2tmq5aKXSnajXslwuEc2AF4Q==", + PhoneNumberConfirmed = false, + SecurityStamp = "4323b9d9-b92f-4ef3-94b1-77050d61341a", + TwoFactorEnabled = false, + UserName = "admin" + }); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => @@ -176,6 +192,20 @@ namespace Data.Migrations .HasFilter("[NormalizedName] IS NOT NULL"); b.ToTable("AspNetRoles"); + + b.HasData( + new + { + Id = "0387a4dd-4a2a-4119-b7c9-5d5e7c16b0ed", + ConcurrencyStamp = "cb148526-d897-4dfa-966f-b67b73e16be5", + Name = "Admin" + }, + new + { + Id = "b0aacbe6-4603-4b03-b4e7-b521491bef85", + ConcurrencyStamp = "ef05edac-cedf-488c-9e99-569b0d434c10", + Name = "Employee" + }); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => @@ -261,6 +291,18 @@ namespace Data.Migrations b.HasIndex("RoleId"); b.ToTable("AspNetUserRoles"); + + b.HasData( + new + { + UserId = "b482663b-78bc-4b6a-81a6-75d52d87bbb1", + RoleId = "0387a4dd-4a2a-4119-b7c9-5d5e7c16b0ed" + }, + new + { + UserId = "b482663b-78bc-4b6a-81a6-75d52d87bbb1", + RoleId = "b0aacbe6-4603-4b03-b4e7-b521491bef85" + }); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => diff --git a/RentACar/WebApp/Areas/Identity/Pages/Account/Login.cshtml b/RentACar/WebApp/Areas/Identity/Pages/Account/Login.cshtml index 8e4d327..857833a 100644 --- a/RentACar/WebApp/Areas/Identity/Pages/Account/Login.cshtml +++ b/RentACar/WebApp/Areas/Identity/Pages/Account/Login.cshtml @@ -14,9 +14,9 @@
- - - + + +
diff --git a/RentACar/WebApp/Areas/Identity/Pages/Account/Login.cshtml.cs b/RentACar/WebApp/Areas/Identity/Pages/Account/Login.cshtml.cs index 0cd002d..f0d900b 100644 --- a/RentACar/WebApp/Areas/Identity/Pages/Account/Login.cshtml.cs +++ b/RentACar/WebApp/Areas/Identity/Pages/Account/Login.cshtml.cs @@ -12,23 +12,27 @@ using Microsoft.AspNetCore.Identity.UI.Services; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.Extensions.Logging; +using Data; namespace WebApp.Areas.Identity.Pages.Account { [AllowAnonymous] public class LoginModel : PageModel { + private readonly RentACarDbContext rentACarDbContext; private readonly UserManager _userManager; private readonly SignInManager _signInManager; private readonly ILogger _logger; - public LoginModel(SignInManager signInManager, + public LoginModel(RentACarDbContext dbContext, + SignInManager signInManager, ILogger logger, UserManager userManager) { _userManager = userManager; _signInManager = signInManager; _logger = logger; + rentACarDbContext = dbContext; } [BindProperty] @@ -44,8 +48,8 @@ namespace WebApp.Areas.Identity.Pages.Account public class InputModel { [Required] - [EmailAddress] - public string Email { get; set; } + [Display(Name = "Username")] + public string Username { get; set; } [Required] [DataType(DataType.Password)] @@ -82,7 +86,7 @@ namespace WebApp.Areas.Identity.Pages.Account { // This doesn't count login failures towards account lockout // To enable password failures to trigger account lockout, set lockoutOnFailure: true - var result = await _signInManager.PasswordSignInAsync(Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure: false); + var result = await _signInManager.PasswordSignInAsync(rentACarDbContext.Users.FirstOrDefault(user => user.UserName == Input.Username), Input.Password, Input.RememberMe, lockoutOnFailure: false); if (result.Succeeded) { _logger.LogInformation("User logged in."); diff --git a/RentACar/WebApp/Areas/Identity/Pages/Account/Register.cshtml b/RentACar/WebApp/Areas/Identity/Pages/Account/Register.cshtml index ae33728..c1b1454 100644 --- a/RentACar/WebApp/Areas/Identity/Pages/Account/Register.cshtml +++ b/RentACar/WebApp/Areas/Identity/Pages/Account/Register.cshtml @@ -12,15 +12,30 @@

Create a new account.


+
+ + + +
- - - + + + +
+
+ + + +
+
+ + +
diff --git a/RentACar/WebApp/Areas/Identity/Pages/Account/Register.cshtml.cs b/RentACar/WebApp/Areas/Identity/Pages/Account/Register.cshtml.cs index 5a520fb..58b591a 100644 --- a/RentACar/WebApp/Areas/Identity/Pages/Account/Register.cshtml.cs +++ b/RentACar/WebApp/Areas/Identity/Pages/Account/Register.cshtml.cs @@ -46,11 +46,25 @@ namespace WebApp.Areas.Identity.Pages.Account public class InputModel { + [Required] + [StringLength(50, ErrorMessage = "The {0} must be at least {2} and at max {1} characters long.", MinimumLength = 6)] + [Display(Name = "Username")] + public string Username { get; set; } + [Required] [EmailAddress] [Display(Name = "Email")] public string Email { get; set; } + [Display(Name = "First Name")] + public string FirstName { get; set; } + + [Display(Name = "Last Name")] + public string LastName { get; set; } + + [Display(Name = "Phone")] + public string PhoneNumber { get; set; } + [Required] [StringLength(100, ErrorMessage = "The {0} must be at least {2} and at max {1} characters long.", MinimumLength = 6)] [DataType(DataType.Password)] @@ -75,7 +89,7 @@ namespace WebApp.Areas.Identity.Pages.Account ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList(); if (ModelState.IsValid) { - var user = new User { Id = Guid.NewGuid().ToString(), UserName = Input.Email, Email = Input.Email }; + var user = new User { Id = Guid.NewGuid().ToString(), UserName = Input.Username, Email = Input.Email, FirstName = Input.FirstName, LastName = Input.LastName, PhoneNumber = Input.PhoneNumber }; var result = await _userManager.CreateAsync(user, Input.Password); if (result.Succeeded) { diff --git a/RentACar/WebApp/Controllers/HomeController.cs b/RentACar/WebApp/Controllers/HomeController.cs index 6b36d42..251d3f0 100644 --- a/RentACar/WebApp/Controllers/HomeController.cs +++ b/RentACar/WebApp/Controllers/HomeController.cs @@ -25,6 +25,7 @@ namespace API.Controllers public IActionResult Privacy() { + if(!this.User.Identity.IsAuthenticated) { return Redirect(""); diff --git a/RentACar/WebApp/Views/Shared/_Layout.cshtml b/RentACar/WebApp/Views/Shared/_Layout.cshtml index 009c8c3..6c7b9e3 100644 --- a/RentACar/WebApp/Views/Shared/_Layout.cshtml +++ b/RentACar/WebApp/Views/Shared/_Layout.cshtml @@ -3,7 +3,7 @@ - @ViewData["Title"] - API + @ViewData["Title"] - LuminousRent @@ -11,7 +11,7 @@