TP6.0多应用api应用开始中间件效验请求头

162 阅读1分钟

一、在API目录下创建middleware.php 文件

<?php
return [
    \app\middleware\TokenMiddleware::class,
];

二、在app目录下创建middleware目录,并在middleware目录下创建TokenMiddleware.php文件

<?php
namespace app\middleware;

class TokenMiddleware
{
    public function handle($request, \Closure $next)
    {
        // 检查是否是不需要验证Token的控制器和方法
        $except = ['Auth/Login'];

        $pathinfo = $request->pathinfo();


        if (in_array($pathinfo, $except)) {
            // 不需要验证Token的控制器和方法,直接通过
            return $next($request);
        }

        // 验证Token
        $token = $request->header('token');
        if (empty($token)) {
            // Token不存在,返回错误响应
            return app('json')->fail('Token missing');
        }

        // 解析Token,获取用户ID
        $tokenArray = $this->parseToken($token);
        if($tokenArray['code'] != 200){
            return app('json')->fail($tokenArray['msg']);
        }


        // 将用户ID传递给调用的方法
        $request->uid = $tokenArray['data'];

        // 继续执行下一个中间件或控制器方法
        return $next($request);
    }


    /**
     * 通过token获取jwt的uid
     * @param $token token
     * @return array 
     */
    private function parseToken($token)
    {
        return \jwt\Jwt::check($token);
    }
}

这里\jwt\Jwt::check($token); 我之前的文章使用jwt有下面链接 juejin.cn/post/711458…

三、创建一个测试控制器测试中间件和uid是否获取正确

<?php
namespace app\api\controller;

use crmeb\basic\BaseController;

class Text extends BaseController{


    public function text(){

        dd($this->request->uid);
    }
}

到这里就完了,我这里能知道打印出uid

小伙伴们!这样就完成了哦! QQ学习交流群:842167453 ,欢迎小伙伴加入一起学习。