composer require tinywan/jwt
用户端路由使用jwt中间件
Route::get('/profile', \app\api\user\controller\UserController::class . '@profile')->middleware([
\app\middleware\JwtUser::class
]);
管理员后台路由使用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());