注解配置控制器中间件不生效

xinhuo110

问题描述

我注解给控制器设置中间件,中间件咋不生效呢
访问getuserinfo,直接通过了(访问未携带token),没有进入到中间件里面。

控制器文件内容(这里用了注解给控制器设置中间件):

<?php
namespace app\wx\controller;

use support\Request;
use Tinywan\Jwt\JwtToken;

use support\annotation\Middleware;
use app\middleware\AuthCheckTest;

[Middleware(AuthCheckTest::class)]

class AppController
{

public function getuserinfo(Request $request){

    return '登录了、进来了';

}

public function login(Request $request){

    return '未登陆、登陆';

}

}

中间件文件内容:

<?php
namespace app\middleware;

use ReflectionClass;
use Webman\MiddlewareInterface;
use Webman\Http\Response;
use Webman\Http\Request;

use Tinywan\Jwt\JwtToken;

class AuthCheckTest implements MiddlewareInterface
{
public function process(Request $request, callable $handler) : Response
{

    //验证token
    $token = $request->header('Authorization');
    if (!$token || !JWT::validate($token)) {
        return response('Unauthorized', 401);        
    // 验证token成功 或 不需要登陆,请求继续向洋葱芯穿越
    }else{    
        return $handler($request);
    }

}

}

这个wx是多应用的一个应用,上面这2个配置,当我用全局中间件配置测试的时候,中间件是有生效的。但是,没有改动任何东西,如果我用注解给控制器配置中间件却不生效了?

213 2 0
2个回答

tj224589

试试路由中间价

  • xinhuo110 14天前

    现在用了应用中间件,然后在中间件判断路由器进行

  • tj224589 14天前

    在一个应用中,可以用路由分组搭配指定中间件,也可以用应用中间件,然后搭配反射排除某些不需要验证的方法

  • xinhuo110 14天前

    我现在就是用的应用中间件,然后搭配反射排除某些不需要验证的方法

  • xinhuo110 14天前

    如果用路由分组搭配指定中间件,应该要怎么配置呢(如果我想给wx应用下的AppController控制器配置AuthCheck中间件)

  • xinhuo110 14天前

    wenman里面的文档,路由分组对一些参数解释的不够详细,试了几次也没成功

walkor 打赏

执行 composer info 看下 webman-framework 版本信息,注解中间件在1.6.11版本才开始支持。
也有可能被其它中间件拦截了,没走到你的中间件

  • xinhuo110 13天前

    难怪,webman-framework 1.5.18的, 中间件被拦截应该不太可能,这是一个测试项目,目前只有一个中间件

  • xinhuo110 13天前

    我现在用的是应用中间件,然后在中间件里面判断是否是目标控制器和方法 进行处理

  • xinhuo110 13天前

    如果用路由分组搭配指定中间件,应该要怎么配置呢(例如:如果我想给wx应用下的AppController控制器配置AuthCheck中间件)

  • walkor 13天前

    路由分组不支持给某个控制器设置中间件,路由里都是基于具体的控制器设置中间件的。
    下次提问把版本都带上,这样能得到快速回复,问题不清晰,版本不清晰的问题一般都不会被忽略掉,不回复

  • xinhuo110 13天前

    好的大佬

×
🔝