首页 > 其他分享 >EFCore使用中间件进行登录认证

EFCore使用中间件进行登录认证

时间:2023-08-16 21:33:48浏览次数:31  
标签:EFCore 中间件 接口 认证 token context public 请求

如何实现中间件(Middleware)用户登录验证

中间件(Middleware)是ASP.NET Core中的一个重要特性。所谓中间件就是嵌入到应用管道中用于处理请求和响应的一段代码。它又被称为管道模型。

中间件的执行顺序是:内置中间件优先-其次自定义中间件

1.首先我们需要创建WebApi

IMG_256

这是小编的API,然后找到Program.cs

IMG_257

//输入:
app.UseMiddleware(typeof(MyMiddleware));

typeof后的命名无需和上图一致自己定义 使用 typeof 关键字可以获取到一个类型的对象,而不是实例化该类型的对象 这样可以将中间件类型作为参数传递给 app.UseMiddleware() 方法,让 ASP.NET Core 框架能够在请求管道中创建和使用该中间件的实例。 这句话的意思是使用中间件,UseMiddleware方法用于将中间件添加到应用程序的请求处理管道中;

2.创建自定义中间件

复制typeof后的名称进行自定义中间件的创建:

右键WebApi后添加一个clss(类)

之后继承 IMiddleware:它是一个中间件库接口,继承后可以使用中间件内置的方法

IMG_258

然后我们实现接口

之后我们会得到一个构造函数

   public class MyMiddleware : IMiddleware
  {  
       public Task InvokeAsync(HttpContext context, RequestDelegate next)
      {      
             throw new NotImplementedException();
      }
  }

3.配置中间件

这个构造函数有两个返回值一个是next(context)传递,一个是Task.CompletedTask终止传递;

然后我们先获取请求我的购物车查询接口

   public class MyMiddleware : IMiddleware
  {  
       public Task InvokeAsync(HttpContext context, RequestDelegate next)
      {      
            var path=context.Request.Path.Value.ToLower();
      }
  }

现在path中就获取到了我们每个请求的方法接口,然后我们进行判断 根据自己业务需求,判断接口,我这里判断的是请求我的购物车查询接口时,判断有无令牌

   public class MyMiddleware : IMiddleware
  {
       private readonly IBaseRepository<UserModel> user;

       public MyMiddleware(IBaseRepository<UserModel> user)
      {
           this.user = user;
      }
       //判断当前信息要不要传递给API
       //判断前要先找出我们业务需要的数据
       //例如: 请求我的购物车查询接口时,如果用户没有登录,
       //那么API即使查询也是无数据的,所以是不需要让API执行查询操作的
       //获取当前请求的接口名称,判断如果请求的是我的购物车接口,就需要获取登录的用户信息,没有登录就不再把请求传递给API
       public Task InvokeAsync(HttpContext context, RequestDelegate next)
      {      
           //获取到请求的方法接口
           var path=context.Request.Path.Value.ToLower();

           //判断是否是业务需要的方法接口
           if (path== "/api/Shop/GetMyShop".ToLower())
          {
               //如果是获取Vue传递过来的请求中是否有token
               var token = context.Request.Headers["token"].ToString();

               //若token为空直接取消执行
               if (token=="")
              {
                   return Task.CompletedTask;
              }

               //若有则和数据库进行对比,查看数据库中是否有此token
               var list = user.GetAll().FirstOrDefault(x => x.Token == token);

               //若找到了
               if (list!=null)
              {
                   //允许执行
                   return next(context);
              }

               //否则直接取消执行
               return Task.CompletedTask;
          }

           //若不是需要的接口方法,则允许执行
          return next(context);
      }
  }

4.前台传递请求时需带上headers,并将token在headers中传递至服务端

Vue传值:

GetMyShop() {
    //前台传值方式:
    this.axios
      .get("http://localhost:5233/api/Shop/GetMyShop", {
        params: {
          User_Id: sessionStorage.getItem("uid"),
        },
        headers: {
          token: sessionStorage.getItem("token"),
        },
      })
      .then((res) => {
        this.tableData = res.data;
      });
  },

标签:EFCore,中间件,接口,认证,token,context,public,请求
From: https://www.cnblogs.com/Iflifecouldctrlz/p/17636255.html

相关文章

  • 中间件
    什么是中间件?中间件是位于客户端和服务器之间的一个处理接口请求的组件。它为我们提供了一种灵活、可扩展和可维护的方式来处理这些请求和响应中间件可以被视为一种管道,用于对HTTP请求和响应进行处理、过滤,常见的有跨域,静态文件。中间件分为内置中间件和自定义中间件,中间件按......
  • ACP认证笔记
    每个ecs最多可加入5个安全组,至少加入一个安全组安全组支持有状态应用。一个有状态的会话连接中,会话的最长保持时间是910秒。安全组会默认放行同一会话中的通信。例如,在会话期内,如果连接的数据包在入方向是允许的,则在出方向也是允许的。阿里云的云服务器ECS实例的使用中,要创建新的安......
  • 数字化格局下的引领者:百望云通过强制性国家标准GB18030-2022最高级别认证
    8月1日,强制性国家标准GB18030-2022《信息技术中文编码字符集》实施。8月15日,百望云“绿页阅读器”正式通过中国电子技术标准化研究院强制性国家标准GB18030-2022《信息技术中文编码字符集》最高级(实现级别3)认证,彰显了百望云在数字化信息处理领域对标国家标准的卓越技术实......
  • 中电金信通过KCSP认证 云原生能力获权威认可
    ​中电金信通过KCSP(KubernetesCertifiedServiceProvider)认证,正式成为CNCF(云原生计算基金会)官方认证的Kubernetes服务提供商。 ​ Kubernetes是容器管理编排引擎,底层实现为容器技术,是云原生领域最关键技术之一。作为全球最大的云计算社区——CNCF的第一个毕业项目,Kub......
  • 沃通CA荣获 ISO9001、ISO20000、ISO27001 等多项国际ISO体系认证
    近年来,沃通CA先后荣获《ISO9001质量管理体系认证证书》、《ISO20000信息技术服务管理体系认证证书》、《ISO27001信息安全管理体系认证证书》等多项国际ISO体系认证证书,充分体现沃通CA在产品质量、信息技术服务、信息安全等方面具备符合国际标准的管理能力及持续的竞争力。国际ISO......
  • centos7搭建radius认证服务器
     centos7搭建radius认证服务器一、实验设备清单1.VMware15.52.centos7(radius服务器)3.管理型交换机(radius客户端)二、安装centos7虚拟机1.安装虚拟机,并配置联网说明:centos7虚拟机网卡配置采用桥接模式。编辑网卡信息,并配置静态IP地址。vi/etc/sysconfig/network-sc......
  • MAC 认证和 MAC 旁路认证
    MAC认证和MAC旁路认证一、MAC认证原理1、MAC认证是什么?MAC认证,是指终端网络接入控制设备自动获取终端的MAC地址,作为接入网络的凭证发到RADIUS服务器进行校验。MAC认证是一种基于接口和MAC地址对用户的网络访问权限进行控制的认证方法,它不需要用户安装......
  • 华为认证 | HCIE-Cloud Computing V2.0实验考试延期下线公告
    尊敬的考生:为保障考生学习连续性,响应考过HCIE-CloudComputingV2.0笔试的考生参加HCIE-CloudComputingV2.0实验考试的需求,综合考虑将HCIE-CloudComputingV2.0实验考试下线日期延期至2023年12月31日。请广大考生尽早预约参加考试,如有任何疑问,请至华为人才在线官网提交问题单进......
  • DAMA-CDGA/CDGP数据治理认证8月20日线上开班
    DAMA认证为数据管理专业人士提供职业目标晋升规划,彰显了职业发展里程碑及发展阶梯定义,帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力,促进开展工作实践应用及实际问题解决,形成企业所需的新数字经济下的核心职业竞争能力。DAMA是数据管理方面的认证,帮助数据从业者提升......
  • 2023下半年产品经理国际认证NPDP8月19日线上开班
    产品经理国际资格认证NPDP是新产品开发方面的认证,集理论、方法与实践为一体的全方位的知识体系,为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。  【认证机构】 产品开发与管理协会(PDMA)成立于1979年,是全球范围内产品开发与管理专业人士最杰出的倡导者,协助个人、企业......