【问题标题】:How ASP.NET Core 3.1 default authentication work?ASP.NET Core 3.1 默认身份验证如何工作?
【发布时间】:2020-07-02 12:54:17
【问题描述】:

我创建了一个带有“个人用户帐户”身份验证的新 ASP.NET Core 3.1 MVC 项目。

如果我运行应用程序,然后单击导航栏中的“注册”链接,它会重定向到:https://localhost:44337/Identity/Account/Register

但是,没有称为“身份”或“帐户”的控制器,也没有称为“注册”的操作。我也找不到代表用户帐户的“模型”。因此,它们似乎位于 ASP.NET Core 源代码中的某个位置。

所以,这里有一些具体的问题:

  1. 注册新用户时,默认模板直接对数据库进行操作。如何制作“假”类以避免在开发时对数据库进行操作,并在以后轻松恢复使用数据库?

  2. 如何修改登录和注册视图?没有“Login.cshtml”或“Register.cshtml”或类似的东西。

  3. 如何扩展用户模型的能力,例如在“出生日期”中添加一个字段?

【问题讨论】:

    标签: c# asp.net asp.net-mvc asp.net-core


    【解决方案1】:

    您提到的默认页面是“内置”的。如果要覆盖它们,则需要在要覆盖的页面上运行脚手架。

    要添加脚手架页面,右键单击项目/新脚手架项目/身份/添加,你会得到这个

    勾选您要覆盖的页面,它将为您生成它们作为源代码。

    运行迁移时,使用 .HasData 在数据库中创建种子条目,如图所示 here

    modelBuilder.Entity<Post>().OwnsOne(p => p.AuthorName).HasData(
       new { PostId = 1, First = "Andriy", Last = "Svyryd" },
       new { PostId = 2, First = "Diego", Last = "Vega" });
    

    【讨论】:

    • 太棒了!但是,在开发时不处理数据库有什么意义呢?我怎样才能以某种方式使用 DI 让假的硬编码用户工作?
    • 在运行迁移时使用种子数据在您的数据库中填充测试用户。见这里:docs.microsoft.com/en-us/ef/core/modeling/data-seeding
    【解决方案2】:

    关于问题 3,您可以创建自己的从 IdentityUser 扩展的用户类:

    public class ApplicationUser : IdentityUser
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public DateTime DateOfBirth { get; set; }
    }
    

    然后在你的 ApplicationDbContext.cs 中注册它:

    public DbSet<ApplicationUser> Users { get; set; }
    

    【讨论】:

      【解决方案3】:

      你需要检查区域文件夹来存放这个类的 cshtml 文件。

      【讨论】:

        猜你喜欢
        • 2021-06-19
        • 1970-01-01
        • 2017-09-11
        • 1970-01-01
        • 2017-05-07
        • 2020-05-27
        • 1970-01-01
        • 2020-08-31
        • 2019-10-18
        相关资源
        最近更新 更多