1.修复矿建鉴权报错
2.优化登录跳转接口 3.优化登录跳转接口 4.修复CURD生成代码模块表不加前缀访问返回404问题 5.系统级报错***优化报错Fatal error: Type of app\common\library\token\TokenExpirationException::$message
This commit is contained in:
@@ -142,9 +142,14 @@ class Backend extends Api
|
||||
|
||||
if ($needLogin) {
|
||||
if (!$this->auth->isLogin()) {
|
||||
if ($request->method() === 'GET' && !$this->expectsApiJsonResponse($request)) {
|
||||
$location = $this->adminSpaLoginUrl($request);
|
||||
return redirect($location);
|
||||
}
|
||||
// 必须使用 HTTP 200 返回 JSON:若用 HTTP 303,axios 会跟随重定向,拿不到 JSON,前端无法跳转登录
|
||||
return $this->error(__('Please login first'), [
|
||||
'type' => Auth::NEED_LOGIN,
|
||||
], 0, ['statusCode' => Auth::LOGIN_RESPONSE_CODE]);
|
||||
], 0);
|
||||
}
|
||||
if ($needPermission) {
|
||||
$controllerPath = $this->getControllerPath($request);
|
||||
@@ -167,6 +172,37 @@ class Backend extends Api
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否应按 API 返回 JSON(前端 axios 会带 server: true;纯浏览器地址栏访问多为 HTML Accept)
|
||||
*/
|
||||
protected function expectsApiJsonResponse(WebmanRequest $request): bool
|
||||
{
|
||||
$server = $request->header('server', '');
|
||||
if ($server === 'true' || $server === '1') {
|
||||
return true;
|
||||
}
|
||||
if (strtolower($request->header('x-requested-with', '')) === 'xmlhttprequest') {
|
||||
return true;
|
||||
}
|
||||
$accept = strtolower($request->header('accept', ''));
|
||||
if (str_contains($accept, 'application/json')) {
|
||||
return true;
|
||||
}
|
||||
// 浏览器地址栏/点击链接触发的主文档请求,优先 302 到前端登录(避免误判为 API)
|
||||
if (strtolower((string) $request->header('sec-fetch-mode', '')) === 'navigate') {
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 后台 Vue 为 hash 路由时的登录页(相对路径,与 web/src/router 一致)
|
||||
*/
|
||||
protected function adminSpaLoginUrl(WebmanRequest $request): string
|
||||
{
|
||||
return '/#/admin/login';
|
||||
}
|
||||
|
||||
/**
|
||||
* 子类可覆盖,用于初始化 model 等(替代原 initialize)
|
||||
* @return Response|null 需直接返回时返回 Response,否则 null
|
||||
|
||||
Reference in New Issue
Block a user