tp6 使用中间件验证token

Token 验证函数 生成:TP6 JWT Token 生成 控制器使用 中间件使用_Bug_Free_的博客-CSDN博客

0x01        通过命令行指令快速生成中间件

php think make:middleware CheckToken

这个指令会 app/middleware目录下面生成一个Check中间件。

<?php
 
namespace app\middleware;
 
class CheckToken
{
    public function handle($request, \Closure $next)
    {
        if ($request->param('name') == 'think') {
            return redirect('index/think');
        }
 
        return $next($request);
    }
}

中间件的入口执行方法必须是handle方法,而且第一个参数是Request对象,第二个参数是一个闭包。

修改上面这个文件app/middleware/CheckToken.php

<?php
 
declare(strict_types=1);
 
namespace app\middleware;
 
// 数据库
use app\model\Admins;
 
class CheckToken
{
    /**
     * 处理请求
     *
     * @param \think\Request $request
     * @param \Closure       $next
     * @return Response
     */
    public function handle($request, \Closure $next)
    {
        // 获取token
        $token = $request->header('token');
        // 验证是否存在token
        if (empty($token)) {
            return json(['msg' => 'error', 'data' => 'token为空']);
        } else {
            $admins_token =  Admins::where('token', $token)->find();
            // JWT进行校验token
            $res = checkToken($token);
            // token是否存在数据库中
            if (empty($admins_token)) {
                return json(['msg' => 'error', 'data' => 'token不合法']);
                // token是否正确
                if ($res['code'] != 1) {
                    return json(['msg' => 'error', 'data' => 'token验证失败']);
                }
            }
        }
 
        return $next($request); //返回请求数据本身
    }
}

0x02        控制器中间件使用 

['except' => 'login']] 可以剔除不需要验证token的函数 

    protected $middleware = [\app\middleware\CheckToken::class => ['except' => 'login']];

0x03        如果全局应用验证token中间件

在\app\middleware.php文件中添加

<?php
// 全局中间件定义文件
return [
    // 全局请求缓存
    // \think\middleware\CheckRequestCache::class,
    // 多语言加载
    // \think\middleware\LoadLangPack::class,
    // Session初始化
    // \think\middleware\SessionInit::class
    // 注册中间件
    \app\middleware\CheckToken::class
    // 跨域
    // \think\middleware\AllowCrossDomain::class
];

0x04        如果需要跨域接收token

TP6 中间件开启跨域 token_Bug_Free_的博客-CSDN博客

猜你喜欢

转载自blog.csdn.net/qq_43929048/article/details/123705415