使用自定义模型的基于身份的身份验证

Identity based Authentication with Custom model

我正在尝试向 asp net core 3.1 应用程序添加身份验证。 我有一个现有的数据库,我从那里生成了模型。主要限制是我受限于数据库结构。

例如,这是我需要的用户模型。

 public partial class TFactoryWorker: IdentityUser
    {
        public int idPerson { get; set; }
        public string Code { get; set; }
        public int Token { get; set; }
}

思路如下,从IdentityUser继承模型(我在该模型中已经有用户名,电子邮件等)更新DBContext并自定义注册/登录字段脚手架视图。 (https://docs.microsoft.com/en-us/aspnet/core/security/authentication/customize-identity-model?view=aspnetcore-3.1).

例如,我需要 FactoryWorker 使用 TokenCode 而不是 email[=34= 登录] 和 密码

这样做可行吗?

我也找到了这个 post https://docs.microsoft.com/en-us/aspnet/core/security/authorization/secure-data?view=aspnetcore-3.1 。这里它定义了一个联系模型,其中包含一个 OwnerId,它与 AspNetUsers table 相关,因此原始实体 (FactoryWorker ) 需要最少的更改(只需添加绑定到 aspNetUser 的 OwnerId) 这里的重点是,我需要在不修改现有 table 的情况下添加身份验证。 关于如何进行的任何建议或一些技巧(我是所有这些东西的初学者,我对大量信息感到不知所措......谢谢!)

我做了以下事情。

我创建了一个 asp 网络核心应用程序,其中包含 个人用户帐户 ,并进行了必要的更改以显示 用户名 字段而不是默认的电子邮件输入字段。 (这只是从脚手架项自定义输入模型和模板,用户现在使用用户名+密码登录)

然后在我的数据库中我做了一些修改。

在我的 TFactoryWorker Table 中,我将 Code 字段设置为主键(这是一个唯一值,不可重复)。记住下面的模型

 public partial class TFactoryWorker
    {
        public int idWorker {get;}
        public string Code { get; set; }
        public int Token { get; set; }
    }

然后我有 AspNetUsers table 及其适当的字段(id、用户名、电子邮件等)(这是通过 migrations 自动生成的),我添加到这个 table 从字段 UserName 到 table TFactoryWorker Code 的外键。 代码用户名相同。

这样我就不必修改我现有的数据库。可能是从 TFactoryWorker table 中删除一些冗余字段的一些规范化(此 table 包含一封电子邮件,phone 和 AspNetUsers 中已经存在的一些其他字段)

缺点是我需要让每个用户在系统中再次注册,但使用他们在以前的应用程序中使用的用户名或代码。一旦他们在应用程序中注册,来自 aspNetUsers 的用户名与 TFactoryWorker 中代码中的现有值相同。

总结

我使用默认身份验证并添加一个外键,因此我不需要对 table 的其余部分进行更改,TFactoryWorker 只是 AspNetUsers table 的一些附加数据,并且它们被外键绑定,所以如果我需要从用户那里获取一些信息,我可以通过一些连接来获取它。

我不确定这是否正确,但它对我有用。