我正在尝试向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 ) 这里的重点是,我需要在不修改现有表的情况下添加身份验证。 关于如何进行的任何建议或一些提示(我是所有这些东西的初学者,我对信息量感到不知所措...谢谢!)
答案 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表的一些其他数据,它们被外键绑定,所以如果我需要从用户那里获取一些信息,我可以通过进行一些连接来获取它。
我不确定这是否是正确的方法,但是它对我有用。