首页 > 解决方案 > 为什么我无法使用我的种子用户 C#、迁移种子、身份、核心 3 登录

问题描述

我已将种子用户添加到我的数据库中。我仍然无法使用该用户登录。也许是散列密码有问题,或者我完全误解了 IdentityUser 类的使用。我不确定真的,所以任何帮助表示赞赏。

我已将种子代码添加到生成的 Migrations 类中,名称为 Initial through Add-Migration Initial-command,位于 Up() 方法的底部。

var hasher = new PasswordHasher<IdentityUser>();
IdentityUser user = new IdentityUser();
var pass = hasher.HashPassword(user, "Holliday1!");

migrationBuilder.InsertData(
    table: "AspNetUsers",
    columns: new[] { "Id", "UserName", "Email", "PasswordHash", "EmailConfirmed", "PhoneNumberConfirmed", "TwoFactorEnabled", "LockoutEnabled", "AccessFailedCount" },
    values: new object[] { user.Id, "Admin@istrator.com", "Admin@istrator.com", pass, true, true, false, false, 0 },
    schema: null);

整个类看起来像这样(当然很短 //):

public partial class Initial : Migration
{
    protected override void Up(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.CreateTable(
            name: "AspNetRoles",
            columns: table => new
            {
                Id = table.Column<string>(nullable: false),
                Name = table.Column<string>(maxLength: 256, nullable: true),
                NormalizedName = table.Column<string>(maxLength: 256, nullable: true),
                ConcurrencyStamp = table.Column<string>(nullable: true)
            },
            constraints: table =>
            {
                table.PrimaryKey("PK_AspNetRoles", x => x.Id);
            });

        migrationBuilder.CreateTable(
            name: "AspNetUsers",
            columns: table => new
            {
                Id = table.Column<string>(nullable: false),
                UserName = table.Column<string>(maxLength: 256, nullable: true),
                NormalizedUserName = table.Column<string>(maxLength: 256, nullable: true),
                Email = table.Column<string>(maxLength: 256, nullable: true),
                NormalizedEmail = table.Column<string>(maxLength: 256, nullable: true),
                EmailConfirmed = table.Column<bool>(nullable: false),
                PasswordHash = table.Column<string>(nullable: true),
                SecurityStamp = table.Column<string>(nullable: true),
                ConcurrencyStamp = table.Column<string>(nullable: true),
                PhoneNumber = table.Column<string>(nullable: true),
                PhoneNumberConfirmed = table.Column<bool>(nullable: false),
                TwoFactorEnabled = table.Column<bool>(nullable: false),
                LockoutEnd = table.Column<DateTimeOffset>(nullable: true),
                LockoutEnabled = table.Column<bool>(nullable: false),
                AccessFailedCount = table.Column<int>(nullable: false)
            },
            constraints: table =>
            {
                table.PrimaryKey("PK_AspNetUsers", x => x.Id);
            });

        //migrationBuilder.CreateTable("AspNetRoleClaims"...);

        //migrationBuilder.CreateTable("AspNetUserClaims"...);

        //migrationBuilder.CreateTable("AspNetUserLogins" ...);

        //migrationBuilder.CreateTable("AspNetUserRoles"...);

        //migrationBuilder.CreateTable("AspNetUserTokens"...);

        //migrationBuilder.CreateIndex(...)

        //User and role seeds
        var role1 = new IdentityRole();
        var roleId1 = role1.Id;

        var role2 = new IdentityRole();
        var roleId2 = role2.Id;

        migrationBuilder.InsertData(
            table: "AspNetRoles",
            columns: new[] { "Id", "Name" },
            values: new object[,] { { roleId1, "Användare" }, { roleId2, "Administratör" } });

        var hasher = new PasswordHasher<IdentityUser>();
        var user = new IdentityUser();
        var pass = hasher.HashPassword(user, "Holliday1!");

        migrationBuilder.InsertData(
            table: "AspNetUsers",
            columns: new[] { "Id", "UserName", "Email", "PasswordHash", "EmailConfirmed", "PhoneNumberConfirmed", "TwoFactorEnabled", "LockoutEnabled", "AccessFailedCount" },
            values: new object[] { user.Id, "Admin@istrator.com", "Admin@istrator.com", pass, true, true, false, false, 0 },
            schema: null);

        migrationBuilder.InsertData(
            table: "AspNetUserRoles",
            columns: new [] {"UserId", "RoleId"},
            values: new object[] { user.Id, roleId2}
            );
    }

    protected override void Down(MigrationBuilder migrationBuilder)
    {
        //migrationBuilder.Drop(...) drops all tables
    }
}

数据库是 SQLLite,用户在带有生成 ID 和散列密码的 db 文件中。使用注册页面创建用户时,我得到一个不同格式的散列密码,这就是为什么我不确定我为我的种子用户所做的散列是否正确。

有任何想法吗?谢谢!

标签: c#asp.net-core-identity

解决方案


推荐阅读