41 lines
1.0 KiB
PHP
41 lines
1.0 KiB
PHP
<?php
|
|
|
|
namespace app\middleware;
|
|
|
|
use app\model\User;
|
|
use app\service\JwtService;
|
|
use app\service\UserContextService;
|
|
use think\exception\HttpResponseException;
|
|
use think\Response;
|
|
|
|
class JwtAuth
|
|
{
|
|
public function handle($request, \Closure $next)
|
|
{
|
|
$token = $request->header('Authorization', '');
|
|
$payload = JwtService::verifyToken($token);
|
|
|
|
if (!$payload || empty($payload['user_id'])) {
|
|
$this->abort('请先登录', 401);
|
|
}
|
|
|
|
$user = User::with(['membership', 'roleModel', 'department'])->find($payload['user_id']);
|
|
if (!$user || $user->status !== 'active') {
|
|
$this->abort('请先登录', 401);
|
|
}
|
|
|
|
$request->authUser = UserContextService::formatAuthUser($user);
|
|
|
|
return $next($request);
|
|
}
|
|
|
|
private function abort(string $message, int $httpCode = 400): void
|
|
{
|
|
throw new HttpResponseException(json([
|
|
'code' => 1,
|
|
'message' => $message,
|
|
'data' => null,
|
|
], $httpCode));
|
|
}
|
|
}
|