通过路由中间件JWT多表认证

Deep
  1. composer require tinywan/jwt

  2. 用户端路由使用jwt中间件
    Route::get('/profile', \app\api\user\controller\UserController::class . '@profile')->middleware([
    \app\middleware\JwtUser::class
    ]);

  3. 管理员后台路由使用jwt中间件
    Route::get('/profile', \app\api\admin\controller\UserController::class . '@profile')->middleware([
    \app\middleware\JwtAdmin::class
    ]);

JwtUser.php

<?php

namespace app\middleware;

use app\model\User;
use Exception;
use Illuminate\Support\Arr;
use Tinywan\Jwt\Token;
use Webman\MiddlewareInterface;
use Webman\Http\Response;
use Webman\Http\Request;

class JwtUser implements MiddlewareInterface
{
    /**
     * @throws Exception
     */
    public function process(Request $request, callable $handler): Response
    {
        try {
            Token::getUser();
        } catch (Exception $e) {
            return response('unauthorized', 401);
        }

        $user = Token::getExtend();

        if (Arr::get($user, 'role') !== 'user') {
            return response('unauthorized', 401);
        }

        return $handler($request);
    }
}

JwtAdmin.php

<?php

namespace app\middleware;

use Exception;
use Illuminate\Support\Arr;
use Tinywan\Jwt\Token;
use Webman\MiddlewareInterface;
use Webman\Http\Response;
use Webman\Http\Request;

class JwtAdmin implements MiddlewareInterface
{
    public function process(Request $request, callable $handler): Response
    {
        try {
            Token::getUser();
        } catch (Exception $e) {
            return response('unauthorized', 401);
        }

        $admin = Token::getExtend();

        if (Arr::get($admin, 'role') !== 'admin') {
            return response('unauthorized', 401);
        }

        return $handler($request);
    }
}

用户控制器
\app\api\user\controller\UserController::class
login方法中
$user = User::query()->find(1);
$user->role = 'user';
Token::generateToken($user->toArray());

管理员控制器
\app\api\admin\controller\UserController::class
login方法中
$admin = Admin::query()->find(1);
$user->role = 'admin';
Token::generateToken($admin->toArray());

44 0 0
0个评论

Deep

220
积分
0
获赞数
0
粉丝数
19小时前 加入
×
🔝