feat: 多功能更新
This commit is contained in:
@@ -1,9 +1,11 @@
|
||||
import type { IUserMeData } from "#shared/types";
|
||||
import {
|
||||
clearNewApiAuthCookies,
|
||||
createApiLogger,
|
||||
createErrorResponse,
|
||||
createSuccessResponse,
|
||||
newApiAuthedFetch,
|
||||
toSafeLogError,
|
||||
upsertUserSnapshot
|
||||
} from "~~/server/utils";
|
||||
|
||||
@@ -24,6 +26,9 @@ interface INewApiSelfUserData extends IUserMeData {
|
||||
}
|
||||
|
||||
export default defineEventHandler(async (event) => {
|
||||
const logger = createApiLogger("auth.me");
|
||||
logger.info("开始");
|
||||
|
||||
try {
|
||||
// 从本站 httpOnly cookie 读取登录态,并转发给 NewAPI 查询当前用户。
|
||||
const result = await newApiAuthedFetch<NewApiUserResponse>(
|
||||
@@ -38,18 +43,35 @@ export default defineEventHandler(async (event) => {
|
||||
if (!normalized.user) {
|
||||
// 上游业务失败代表当前 cookie 不再可靠,清理后返回统一 401。
|
||||
clearNewApiAuthCookies(event);
|
||||
logger.warn("登录状态无效", {
|
||||
upstreamMessage: normalized.message
|
||||
});
|
||||
return createErrorResponse(401, normalized.message);
|
||||
}
|
||||
|
||||
upsertUserSnapshot(normalized.user).catch(() => {});
|
||||
upsertUserSnapshot(normalized.user).catch((error) => {
|
||||
logger.error("保存用户快照失败", {
|
||||
userId: normalized.user?.id,
|
||||
error: toSafeLogError(error)
|
||||
});
|
||||
});
|
||||
|
||||
logger.done("成功", {
|
||||
userId: normalized.user.id,
|
||||
role: normalized.user.role,
|
||||
status: normalized.user.status
|
||||
});
|
||||
|
||||
return createSuccessResponse<IUserMeData>(
|
||||
normalized.user,
|
||||
normalized.message
|
||||
);
|
||||
} catch {
|
||||
} catch (error) {
|
||||
// cookie 缺失或上游鉴权异常时统一视为未登录。
|
||||
clearNewApiAuthCookies(event);
|
||||
logger.warn("未登录或登录态失效", {
|
||||
error: toSafeLogError(error)
|
||||
});
|
||||
return createErrorResponse(401, "未登录");
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user