Files
dafuweng-saiadmin6.x/server/plugin/saiadmin/app/middleware/CheckLogin.php

44 lines
1.6 KiB
PHP

<?php
// +----------------------------------------------------------------------
// | saiadmin [ saiadmin快速开发框架 ]
// +----------------------------------------------------------------------
// | Author: sai <1430792918@qq.com>
// +----------------------------------------------------------------------
namespace plugin\saiadmin\app\middleware;
use Webman\Http\Request;
use Webman\Http\Response;
use Webman\MiddlewareInterface;
use Tinywan\Jwt\JwtToken;
use plugin\saiadmin\app\cache\ReflectionCache;
use plugin\saiadmin\exception\ApiException;
/**
* 登录检查中间件
*/
class CheckLogin implements MiddlewareInterface
{
public function process(Request $request, callable $handler): Response
{
// 通过反射获取控制器哪些方法不需要登录
$noNeedLogin = ReflectionCache::getNoNeedLogin($request->controller);
// 访问的方法需要登录
if (!in_array($request->action, $noNeedLogin)) {
try {
$token = JwtToken::getExtend();
} catch (\Throwable $e) {
throw new ApiException('您的登录凭证错误或者已过期,请重新登录', 401);
}
if ($token['plat'] !== 'saiadmin') {
throw new ApiException('登录凭证校验失败');
}
// 一次合并设置,避免 setHeader 覆盖导致只保留最后一个
$request->setHeader(array_merge($request->header() ?: [], [
'check_login' => true,
'check_admin' => $token,
]));
}
return $handler($request);
}
}