74 lines
2.6 KiB
PHP
74 lines
2.6 KiB
PHP
<?php
|
||
|
||
namespace app\middleware;
|
||
use Webman\MiddlewareInterface;
|
||
use Webman\Http\Request;
|
||
use Webman\Http\Response;
|
||
use app\rpc\client\AuthRpcClient;
|
||
use Exception;
|
||
|
||
class Jwt implements MiddlewareInterface
|
||
{
|
||
public function process(Request $request, callable $handler): Response
|
||
{
|
||
// 获取 Authorization 头
|
||
$authorization = $request->header('Authorization', '');
|
||
if (empty($authorization) || strpos($authorization, 'Bearer ') !== 0) {
|
||
return response(['code' => 1, 'msg' => '缺少 Authorization 头或格式无效'], 200);
|
||
}
|
||
|
||
// 提取 JWT token
|
||
$jwtToken = substr($authorization, 7);
|
||
// dump($jwtToken);
|
||
// return Json([
|
||
// 'code' => 0,
|
||
// 'msg' => 'ok',
|
||
// 'data' => $jwtToken,
|
||
// ]);
|
||
|
||
try {
|
||
// 调用 AuthRpcClient 进行 JWT 验证
|
||
// $authRpcClient = new AuthRpcClient();
|
||
// $response = $authRpcClient->validateJwtToken($jwtToken);
|
||
//
|
||
// // 如果验证不通过,返回错误消息
|
||
// if ($response['result'] !== 'JWT_VERIFY_OK') {
|
||
// return response([
|
||
// 'code' => 1,
|
||
// 'msg' => $this->getErrorMessage($response['result']),
|
||
// ], 200);
|
||
// }
|
||
//
|
||
// // 如果验证通过,将用户数据 (claims) 存入请求属性,供后续使用
|
||
// $request = $request->withAttribute('user', $response['claims']);
|
||
//
|
||
// // 如果返回了新 token,将其添加到响应头 X-New-Token 中
|
||
$response = $handler($request);
|
||
// if (!empty($response['new_token'])) {
|
||
// $response = $response->withHeader('X-New-Token', $response['new_token']);
|
||
// }
|
||
|
||
return $response;
|
||
} catch (Exception $e) {
|
||
return response(['code' => 1, 'msg' => 'JWT 验证失败: ' . $e->getMessage()], 200);
|
||
}
|
||
}
|
||
|
||
private function getErrorMessage($result)
|
||
{
|
||
switch ($result) {
|
||
case 'JWT_VERIFY_BAD_FORMAT':
|
||
return '无效的 token 格式';
|
||
case 'JWT_VERIFY_SIGN_FAILED':
|
||
return 'token 签名无效';
|
||
case 'JWT_VERIFY_EXPIRED':
|
||
return 'token 已过期';
|
||
case 'JWT_VERIFY_REVOKED':
|
||
return 'token 已被撤销';
|
||
case 'JWT_VERSION_LOW':
|
||
return 'token 版本过低';
|
||
default:
|
||
return '未知错误';
|
||
}
|
||
}
|
||
} |