如何使用ASP.net Core中已经存在的用户表在项目上添加身份验证?

时间:2019-01-05 14:55:00

标签: c# asp.net asp.net-mvc database identity

我无法在用户表上建立身份,并且无法在身份表中修改用户表

我创建了模型,然后生成了控件和视图。

https://imgur.com/Q6yhKgZ.png

然后我尝试通过添加新的脚手架项目来创建新的标识,但是我无法使用已经存在的用户表

https://imgur.com/V5YCuyz.png

我还尝试创建一个新项目,首先创建Identity,然后通过添加一些列来修改Identity用户表,然后在相同的上下文中创建我的表,但是我找不到用于修改它的用户模型,并且创建与其他实体的关系。

[Table("User")]
public class User
{
    [Key]
    public int Id { get; set; }

    [Required]
    [Display(Name = "Name")]
    [DataType(DataType.Text)]
    public string Name { get; set; }

    [Required]
    [Display(Name = "Phone Number")]
    [DataType(DataType.PhoneNumber)]
    public string Phone { get; set; }


    [Required]
    [Display(Name = "Email Address")]
    [DataType(DataType.EmailAddress)]
    public string Email { get; set; }


    [Required]
    [Display(Name = "Password")]
    [DataType(DataType.Password)]
    [StringLength(20, MinimumLength = 6)]
    public string Password { get; set; }

    [Required]
    [Display(Name = "Confirm Password")]
    [DataType(DataType.Password)]
    [Compare("Password", ErrorMessage = "Confirm password doesn't match, Type again !")]
    [NotMapped]
    public string ConfirmPassword { get; set; }

    [Required]
    [Display(Name = "Gender")]
    [DataType(DataType.Text)]
    public string Gender { get; set; }

    [Required]
    [Display(Name = "Birth Date")]
    [DataType(DataType.Date)]
    [CustomDate(ErrorMessage = "Use Correct Birthdate")]
    public DateTime BirthDate { get; set; }

    public bool Eanble { get; set; }
    public string Permissions { get; set; }

    [DataType(DataType.DateTime)]
    public DateTime CreateAt { get; set; }
    [DataType(DataType.DateTime)]
    public DateTime UpdateAt { get; set; }

    [InverseProperty("Owner")]
    public List<Article> Articles { get; set; }


    [InverseProperty("Owner")]
    public List<Consultation> Consultations { get; set; }


    [InverseProperty("Owner")]
    public List<ConsultationComment> ConsultationComments { get; set; }
}

1 个答案:

答案 0 :(得分:0)

您使用了错误的方法。 为了向用户添加自己的自定义属性,您应该创建一个派生自Microsoft.AspNetCore.Identity.IdentityUser的类。在这里,您可以添加自己的自定义属性,这些属性将添加到表中。这是您的操作方法:

// using Microsoft.AspNetCore.Identity; is needed
public class ApplicationUser : IdentityUser
{
    public int Age { get; set; } 
}

现在,您应该创建一个从IdentityDbContext派生的类:

 public class AppIdentityDbContext : IdentityDbContext<ApplicationUser>
{
    public AppIdentityDbContext(DbContextOptions<AppIdentityDbContext> options)
        : base(options)
    {
    }

    protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);
    }
}

这基本上是一个具有2个DbSet的DbContext,Identity将使用它。

然后转到您的Startup.cs并在ConfigureServices中添加以下行:

services.AddIdentity<ApplicationUser, IdentityRole>()
   .AddEntityFrameworkStores<AppIdentityDbContext>();

现在,您可以构建项目并查看应用于数据库的更改。您不能删除身份属性,但可以添加自己的属性。