tp6 はミドルウェアを使用してトークンを検証します

トークン検証関数の生成: TP6 JWT トークン生成コントローラーはミドルウェアを使用して use_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オブジェクト、2 番目のパラメータはクロージャです。

上記のファイルを修正します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 コントローラーミドルウェアの使用 

['例外' => 'ログイン']] トークンを検証する必要のない関数を除外できます 

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

0x03 検証トークンミドルウェアがグローバルに適用されている場合

\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 ドメイン間でトークンを受信する必要がある場合

TP6 ミドルウェアがクロスドメイン token_Bug_Free_ のブログをオープン - CSDN ブログ

おすすめ

転載: blog.csdn.net/qq_43929048/article/details/123705415