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

时间:2020-07-20 17:25:33

标签: c# authentication asp.net-identity

我正在尝试向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使用令牌代码而不是电子邮件密码 < / p>

这是可行的方法吗?

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

1 个答案:

答案 0 :(得分:1)

我做了以下事情。

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

然后我在数据库中进行了一些更改。

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

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

然后我有一个AspNetUsers表及其适当的字段(ID,用户名,电子邮件等)(这是通过 migrations 自动生成的),并且我在该表中添加了来自字段用户名到表TFactoryWorker 代码代码用户名相同。

这样,我不必修改现有数据库。可能需要一些规范化操作才能从TFactoryWorker表中删除一些多余的字段(此表包含电子邮件,电话和AspNetUsers中已经存在的其他一些字段)

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

总结

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

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