// +---------------------------------------------------------------------- namespace app\api\middleware; use app\Request; use app\services\user\UserAuthServices; use crmeb\exceptions\AuthException; use crmeb\interfaces\MiddlewareInterface; /** * Class AuthTokenMiddleware * @package app\api\middleware */ class AuthTokenMiddleware implements MiddlewareInterface { /** * @param Request $request * @param \Closure $next * @param bool $force * @return int|mixed|\think\Response * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException * @author 吴汐 * @email 442384644@qq.com * @date 2023/04/07 */ public function handle(Request $request, \Closure $next, bool $force = true) { $authInfo = null; $token = trim(ltrim($request->header('Authori-zation'), 'Bearer')); if (!$token) $token = trim(ltrim($request->header('Authorization'), 'Bearer'));//正式版,删除此行,某些服务器无法获取到token调整为 Authori-zation try { /** @var UserAuthServices $service */ $service = app()->make(UserAuthServices::class); $authInfo = $service->parseToken($token); } catch (AuthException $e) { if ($force) return app('json')->make($e->getCode(), $e->getMessage()); } if (!is_null($authInfo)) { $request->macro('user', function (string $key = null) use (&$authInfo) { if ($key) { return $authInfo['user'][$key] ?? ''; } return $authInfo['user']; }); $request->macro('tokenData', function () use (&$authInfo) { return $authInfo['tokenData']; }); } $request->macro('isLogin', function () use (&$authInfo) { return !is_null($authInfo); }); $request->macro('uid', function () use (&$authInfo) { return is_null($authInfo) ? 0 : (int)$authInfo['user']->uid; }); return $next($request); } }