.Net Core 身份在 .Net Core 5.0 中添加公司名称作为用户登录过程的一部分

Posted

技术标签:

【中文标题】.Net Core 身份在 .Net Core 5.0 中添加公司名称作为用户登录过程的一部分【英文标题】:.Net Core Identity Add Company Name As Part Of User Login Process In .Net Core 5.0 【发布时间】:2021-11-06 07:58:31 【问题描述】:

是否可以在 .Net Core Identity 中使用其他用户字段进行用户登录?我想允许使用电子邮件、密码和第三个字段(即Company Name)登录用户,这是我在ApplicationUser class 中定义的自定义字段,继承自IdentityUser class

我的 ApplictionUser 类:

public class ApplicationUser : IdentityUser
    
        public string FirstName  get; set; 
        public string LastName  get; set; 
        public string CompanyName  get; set; 
    

它工作正常。我可以在注册时为用户添加公司名称。

这是由身份脚手架创建的身份 InputModel 代码:

public class InputModel
        
            [Required]
            [EmailAddress]
            public string Email  get; set; 

            [Required]
            [DataType(DataType.Password)]
            public string Password  get; set; 

            [Required]
            [Display(Name = "Company Name")]
            public string CompanyName  get; set; 

            [Display(Name = "Remember me?")]
            public bool RememberMe  get; set; 
        

我在此处添加了 CompanyName 额外字段。现在我想根据这些字段登录用户。如果用户在登录页面提供的公司名称正确,则允许用户登录,否则不允许。

我在Login.cshtml.cs 文件的OnPostAsync method 中执行以下自定义代码:

var user = await _userManager.FindByEmailAsync(Input.Email);
            ApplicationUser user = new ApplicationUser
            
                Email = Input.Email,
                UserName = Input.Email,
                CompanyName = Input.CompanyName,
            ;
        
        var result = await _signInManager.PasswordSignInAsync(user, Input.Password, Input.RememberMe, lockoutOnFailure: false);

但是每次尝试的结果总是失败。这里有什么问题吗?

【问题讨论】:

【参考方案1】:

您似乎正在用您的新实现覆盖 user 对象,该实现没有密码哈希来检查(除其他外)。

直接检查user是否有正确的公司名称可能更简单,如果不匹配则抛出错误,如下所示:

var user = await _userManager.FindByEmailAsync(Input.Email);

if (user == null || user.CompanyName != Input.CompanyName) 
    ModelState.AddModelError("", "Invalid login attempt");
    return View(model);


var result = await _signInManager.PasswordSignInAsync(Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure: false);

【讨论】:

以上是关于.Net Core 身份在 .Net Core 5.0 中添加公司名称作为用户登录过程的一部分的主要内容,如果未能解决你的问题,请参考以下文章

text 使用ASP.NET Core 2 Web API,Angular 5,.NET核心身份和Facebook登录进行JWT身份验证

ASP.NET Core 5.0 WebAPI 中的多种身份验证方案

ASP.NET Core 5 OpenIdConnect 身份验证 cookie 在理论上是如何工作的?

ASP.NET Core 5 JWT 身份验证失败,响应代码为 401

.net core 2.2 应用程序的 JWT 身份验证不使用身份

ASP.NET Core 5.0 JWT 身份验证引发 401 代码 [重复]