webman_ad/app/middleware/Jwt.php
2024-12-30 11:20:39 +08:00

74 lines
2.6 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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 '未知错误';
}
}
}