学习.Net—ABP_vNext框架:第五章(集成Account账户模块)

596 阅读4分钟

一、概念

账户模块的概念包括以下几个方面:

  1. 用户账户:账户模块提供了用户账户的管理功能,包括创建新账户、修改账户信息、激活/禁用账户等操作。

  2. 身份认证:账户模块负责用户身份认证的过程,包括验证用户的用户名和密码,生成和验证访问令牌,保证只有经过认证的用户可以访问受限资源。

  3. 用户角色和权限:账户模块允许管理员为用户分配角色和权限,以控制用户对系统资源的访问权限。例如,管理员可以将某个用户设置为管理员角色,赋予其管理其他用户账户的权限。

  4. 密码管理:账户模块提供了密码管理功能,包括密码重置、密码加密存储、密码强度检查等。用户可以通过密码重置功能来恢复遗忘的密码,而管理员可以要求用户定期更改密码以增强安全性。

  5. 社交登录集成:账户模块通常也支持社交登录集成,允许用户使用第三方平台(如Google、Facebook等)的账户进行登录。这样可以提高用户的登录便利性,减少用户注册的复杂性。

二、引入管理Nuget包

image.png

三、集成Account账户模块使用

在Module类上使用DependsOn特性集成引入模块 1、示例

      [DependsOn(
          //集成账户模块
          typeof(AbpAccountApplicationModule), //依赖ABP的 账户模块account模板  //生成账户功能
          typeof(AbpAccountHttpApiModule), //依赖ABP的 账户模块account API 模板  生成注册、重置密码...接口
          typeof(AbpAccountWebModule) //依赖ABP的 账户模块account web 模板  //生成登录、退出...接口
          )]
     public class ABP_vNext_Shop_Module : AbpModule
     {
     }

2、正式使用

      using Volo.Abp;
using Volo.Abp.Autofac;
using Volo.Abp.Modularity;
using Volo.Abp.AspNetCore.Mvc;
using Volo.Abp.EntityFrameworkCore;
using ABP_vNext_Shop.Context;
using Volo.Abp.EntityFrameworkCore.MySQL;
using Volo.Abp.Application;
using Volo.Abp.AutoMapper;
using Volo.Abp.Swashbuckle;
using Microsoft.OpenApi.Models;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.AspNetCore.Serilog;
using Volo.Abp.Identity;
using Volo.Abp.Identity.EntityFrameworkCore;
using Volo.Abp.PermissionManagement.EntityFrameworkCore;
using Volo.Abp.PermissionManagement;
using Volo.Abp.Account;
using Volo.Abp.Account.Web;
using Volo.Abp.Data;
using Microsoft.Extensions.Hosting;

namespace ABP_vNext_Shop
{
    [DependsOn(
        typeof(AbpAutofacModule),//依赖ABP 的IOC容器模板
        typeof(AbpAspNetCoreMvcModule),//依赖ABP的 MVC模板
        typeof(AbpEntityFrameworkCoreModule),//依赖ABP的 EF-Core模板
        typeof(AbpEntityFrameworkCoreMySQLModule),//依赖ABP的 EF-Core-MySQL模板
        typeof(AbpDddApplicationModule),//依赖ABP的 ApplicationModule模板
        typeof(AbpAutoMapperModule),//依赖ABP的 AutoMapper自动映射模板
        typeof(AbpSwashbuckleModule),//依赖ABP的 Swagger模板
        typeof(AbpAspNetCoreSerilogModule),//依赖ABP的 Serilog日志模板

        //集成用户身份模块
        typeof(AbpIdentityDomainModule),//依赖ABP的 用户身份领域模型模板
        typeof(AbpIdentityEntityFrameworkCoreModule), //依赖ABP的 身份模块的ef模板
        typeof(AbpIdentityApplicationModule), //依赖ABP的 身份模块的Application应用层模板 实现增删改查功能
        typeof(AbpIdentityHttpApiModule), //依赖ABP的 身份模块的webApi模板 实现自动生成控制器以及接口

        //集成权限模块
        typeof(AbpPermissionManagementEntityFrameworkCoreModule), //依赖ABP的 权限模块的ef模板


        //集成账户模块
        typeof(AbpAccountApplicationModule), //依赖ABP的 账户模块account模板  //生成账户功能
        typeof(AbpAccountHttpApiModule), //依赖ABP的 账户模块account API 模板  生成注册、重置密码...接口
        typeof(AbpAccountWebModule) //依赖ABP的 账户模块account web 模板  //生成登录、退出...接口
        )]
    public class ABP_vNext_Shop_Module : AbpModule
    {
        public override void ConfigureServices(ServiceConfigurationContext context)
        {
            context.Services.AddControllers();
            context.Services.AddEndpointsApiExplorer();
            //context.Services.AddSwaggerGen(options =>
            //{
            //    //4.2、 配置自动生成API控制器 显示在swagger页面上
            //    options.DocInclusionPredicate((document, api) => true);
            //});

            //加载配置文件app.json内容
            var config = context.Services.GetConfiguration();

            //1、加载Abp_ServerContext到IOC容器
            context.Services.AddAbpDbContext<Abp_ServerContext>();

            //2、加载DbContext对应的数据库
            //以mysql为例
            Configure<AbpDbContextOptions>(options =>
            {
                options.UseMySQL();
            });

            //3、加载AutoMapper到IOC容器
            context.Services.AddAutoMapperObjectMapper<Abp_ServerContext>();
            //3.1、 配置AutoMapper
            Configure<AbpAutoMapperOptions>(options =>
            {
                //对整个项目进行映射
                options.AddMaps<ABP_vNext_Shop_Module>();
            });

            //4、配置自动API控制器生成
            Configure<AbpAspNetCoreMvcOptions>(options =>
            {
                //4.1、开启自动API控制器 => 集成整个项目所有控制器
                options.ConventionalControllers.Create(typeof(ABP_vNext_Shop_Module).Assembly, options =>
                {
                    //自定义指定 自动生成的api路由的项目名称
                    options.RootPath = "ABP_vNext_Shop";

                    ////自动api都创建,为true不过滤,为false全部过滤
                    ////非特殊特情况,不要使用这种方式,会写死
                    //options.TypePredicate = type => true;
                });
            });

            //5、配置Abp 的Swagger到IOC容器
            // AddAbpSwaggerGen           不带Authorization验证锁
            // AddAbpSwaggerGenWithOAuth    带Authorization验证锁
            context.Services.AddAbpSwaggerGenWithOAuth(
                config["AuthServer:Authority"],
                new Dictionary<string, string>
                {
                    { "api", "ABP_vNext_Shop_Api" }
                },
                options =>
                {
                    //5.1、 生成swagger文档,配置文档表头信息
                    options.SwaggerDoc("v1", new OpenApiInfo { Title = "ABP_vNext_Shop", Version = "v1" });
                    //5.2、 配置自动生成API控制器 显示在swagger页面上
                    options.DocInclusionPredicate((document, api) => true);
                    //5.3、
                    options.CustomSchemaIds(type => type.FullName);
                });

            //如果集成了权限管理(AbpPermissionManagementEntityFrameworkCoreModule),
            //可以注释掉6.1 和 6.2,账户模块里面已经实现了添加身份验证功能
            ////6.1、添加身份验证
            //context.Services.AddAuthentication().AddCookie();
            ////6.2、添加权限验证
            //context.Services.AddAuthorization();

            ////6.2.1、去除所有权限
            //context.Services.AddAlwaysAllowAuthorization();

            ////7、如果自定义了Identity用户模块数据库表的前缀,访问数据库也需要指定前缀
            //AbpIdentityDbProperties.DbTablePrefix = "Sys_";

        }

        public override void OnApplicationInitialization(ApplicationInitializationContext context)
        {
            //获取app
            var app = context.GetApplicationBuilder();
            //获取环境
            var env = context.GetEnvironment();
            //if (env.IsDevelopment())
            //{
            //    app.UseSwagger();
            //    app.UseSwaggerUI();
            //}

            app.UseSwagger();
            //app.UseSwaggerUI();
            app.UseAbpSwaggerUI(options =>
            {
                options.SwaggerEndpoint("/swagger/v1/swagger.json", "api API");
            });
            app.UseStaticFiles();

            app.UseHttpsRedirection();

            //如果集成了权限管理(AbpPermissionManagementEntityFrameworkCoreModule),
            //可以注释掉 app.UseAuthorization() 权限管道,账户模块里面已经实现了添加 权限管道功能
            //app.UseAuthorization();


        }
    }
}

         

3、效果展示 3.1、接口展示 image.png

3.2、Account注册接口使用 image.png

3.3、结果 image.png 如图,就是ABP_vNext给封装好的Account账户模块接口

以上就是ABP_vNext集成Account账户模块的流程,有问题欢迎到评论区讨论!!!