feat: 增加开发模式 URL 免登录

- 新增 dev-only 且仅限本机访问的 admin 免登入口

- 管理端支持通过 ?devLogin=admin 自动换取登录态并清理 URL 参数

- 删除未受保护的临时 token 接口并补充关键单测
This commit is contained in:
2026-03-07 18:16:42 +08:00
parent 37e185e74a
commit a93f7ca216
14 changed files with 459 additions and 96 deletions

View File

@@ -0,0 +1,39 @@
import type { LocationQuery, LocationQueryRaw } from 'vue-router';
const DEV_LOGIN_ACCOUNT = 'admin';
const DEV_LOGIN_QUERY_KEY = 'devLogin';
function normalizeQueryValue(
value: LocationQuery[string] | LocationQueryRaw[string],
) {
if (Array.isArray(value)) {
return value[0] ?? null;
}
return value ?? null;
}
export function getDevLoginAccount(query: LocationQuery | LocationQueryRaw) {
const value = normalizeQueryValue(query[DEV_LOGIN_QUERY_KEY]);
if (typeof value !== 'string') {
return null;
}
const account = value.trim();
return account.length > 0 ? account : null;
}
export function removeDevLoginQuery(query: LocationQuery | LocationQueryRaw) {
const { [DEV_LOGIN_QUERY_KEY]: _ignored, ...nextQuery } = query;
return nextQuery;
}
export function shouldAttemptDevLogin(params: {
account: null | string;
hasAccessToken: boolean;
isDev: boolean;
}) {
return (
params.isDev &&
!params.hasAccessToken &&
params.account === DEV_LOGIN_ACCOUNT
);
}