使用自定义模型的基于身份的身份验证
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 使用 Token 和 Code 而不是 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 的一些附加数据,并且它们被外键绑定,所以如果我需要从用户那里获取一些信息,我可以通过一些连接来获取它。
我不确定这是否正确,但它对我有用。
我正在尝试向 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 使用 Token 和 Code 而不是 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 的一些附加数据,并且它们被外键绑定,所以如果我需要从用户那里获取一些信息,我可以通过一些连接来获取它。
我不确定这是否正确,但它对我有用。