zoukankan      html  css  js  c++  java
  • ASP.NET Core 3.1 实际操作摸索学习 (Identity部分)

    接上篇: ASP.NET Core 3.1 实际操作摸索学习 (Identity部分) - 2

    分别测试了几种情况:

     最后总结:如果要考虑以后扩展用户属性等灵活性要求,建议还是在新建项目时不要直接选择个人认证,而是在建好项目后再手动加认证基架; 

    同时,在选择新增DBContext的同时,选择新增用户类,不然以后要想增加用户属性字段,需要手动调整很多地方;

    后面按照先有一个带DBContext的MVC应用需要增加Identity 认证来做一些记录:

    第1步:先创建一个MVC 项目,用Nuget安装 entityframework

     主要是安装: Microsoft.EntityFamewordkCore

    和  Microsoft.EntityFamewordkCore.SqlServer  (如果用其他数据库根据需要替换)

    还要再装个 Microsoft.EntityFramwordCore.Tools:

        第2步:搞个Model ,搞1个DBContext ,然后初始化数据库;

        public class Book
        {
            [Key]
            public string Id { get; set; }
            [Required]
            public string Name { get; set; }
            public string Desc { get; set; }
            public string Author { get; set; }
            public decimal Price { get; set; }
    }
    using Microsoft.EntityFrameworkCore;
    using MyCoreTest2.Models;
    
    namespace MyCoreTest2.Data
    {
        public class BookAppContext : DbContext
        {
            public BookAppContext(DbContextOptions<BookAppContext> options)
                : base(options)
            { }
    
            public DbSet<Book> Books { get; set; }
    
            protected override void OnModelCreating(ModelBuilder modelBuilder)
            {
    
                modelBuilder.Entity<Book>().HasData(
                    new Book { ID = 1, Name = "ASP.NET Core MVC", Desc = "ASP.NET相关", Author = "ABC", Price = decimal.Parse("199.01") },
                    new Book { ID = 2, Name = "ASP.NET Core WEBAPI", Desc = "ASP.NET相关", Author = "XYZ", Price = decimal.Parse("99.01") });
    
                base.OnModelCreating(modelBuilder);
            }
        }
    }

    appsettings.json加上数据库连接字符串:

    "ConnectionStrings": {
        "SqlServerConnection": "Server=(localdb)\mssqllocaldb;Database=MyCoreTest2;Trusted_Connection=True;MultipleActiveResultSets=true;"
      },

    为了控制器里可以使用Context,需要在StartUp中ConfigureServices 中注入,StartUp中增加: 

            public void ConfigureServices(IServiceCollection services)
            {
                services.AddDbContext<BookAppContext>(option => option.UseSqlServer(Configuration.GetConnectionString("SqlServerConnection")));
                services.AddControllersWithViews();
            }

    齐活,用数据库迁移来创建数据库表:

    Add-Migration IniCreate

      再执行 Update-Database

     

      

    第4步:直接在Home页面列表显示Model;

     这步简单... 略过...

    第5步:加入Identity基架,选择新增Context和用户类

     

     

    自动添加了 Context和用户类, (用户类是空的,可以根据需求增加字段)

     虽然两个Context (一个是Identity Context 一个是原应用Context) ,但是希望用一个数据库;

    那么就把 IdentityHostingStartup里 数据库字符串改成和原应用Context对应一个字符串:

    builder.ConfigureServices((context, services) => {
                    services.AddDbContext<MyCoreTest2Context>(options =>
                        options.UseSqlServer(
                            context.Configuration.GetConnectionString("SqlServerConnection")));

      给用户类增加一个 备注 字段:

    using Microsoft.AspNetCore.Identity;
    
    namespace MyCoreTest2.Areas.Identity.Data
    {
        // Add profile data for application users by adding properties to the MyCoreTest2User class
        public class MyCoreTest2User : IdentityUser
        {
            public string Remark { get; set; }
        }
    }

     如果直接迁移:

     加上 -Context 参数来指定Context:

     可以看到表已增加在原数据库上,并且用户表增加了 备注字段:

     如果要想为Role增加一个自定义字段,怎么办? (目前还没试验出来。。。后补)

     还需要修改 Startup的 Configure:

            public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
            {
                if (env.IsDevelopment())
                {
                    app.UseDeveloperExceptionPage();
                }
                else
                {
                    app.UseExceptionHandler("/Home/Error");
                    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
                    app.UseHsts();
                }
                app.UseHttpsRedirection();
                app.UseStaticFiles();
    
                app.UseRouting();
                app.UseAuthentication();
                app.UseAuthorization();
    
                app.UseEndpoints(endpoints =>
                {
                    endpoints.MapControllerRoute(
                        name: "default",
                        pattern: "{controller=Home}/{action=Index}/{id?}");
                    endpoints.MapRazorPages();
                });
            }

    当第一选择新建Context 及 User 类后,后面如果再加基架里的其他页面,可以下拉直接选择已新建的Context;

  • 相关阅读:
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    Java最常用的工具类库
    运筹学那些事,专科学生学习运筹学之网络计划技术,No.6
    这么设计实时数据平台,OLAP再也不是个事儿
    从这 5 个场景 , 看 MPC 多方安全计算的行业应用
    前后端通信进行AES加密(Vue
    圣诞快乐: 用 GaussDB T 绘制一颗圣诞树,兼论高斯数据库语法兼容
    安全多方计算新突破:阿里首次实现“公开可验证”的安全方案
    矩阵元安全多方详细介绍
    MySQL InnoDB引擎如何保证事务特性
  • 原文地址:https://www.cnblogs.com/jacky-zhang/p/13198145.html
Copyright © 2011-2022 走看看