@@ -1,4 +1,5 @@
|
|||||||
// server/api/auth/login.post.ts
|
// server/api/auth/login.post.ts
|
||||||
|
import { consola } from "consola";
|
||||||
import type { IUserLoginData, IUserLoginRequest } from "#shared/types";
|
import type { IUserLoginData, IUserLoginRequest } from "#shared/types";
|
||||||
import {
|
import {
|
||||||
clearNewApiAuthCookies,
|
clearNewApiAuthCookies,
|
||||||
@@ -78,10 +79,10 @@ export default defineEventHandler(async (event) => {
|
|||||||
if (!session) {
|
if (!session) {
|
||||||
// 没有 session 就不能恢复 NewAPI 登录态,必须让前端明确感知失败。
|
// 没有 session 就不能恢复 NewAPI 登录态,必须让前端明确感知失败。
|
||||||
clearNewApiAuthCookies(event);
|
clearNewApiAuthCookies(event);
|
||||||
return createErrorResponse(
|
consola.error(
|
||||||
500,
|
"/api/auth/login 登录成功但未收到 NewAPI session,请稍后重试"
|
||||||
"登录成功但未收到 NewAPI session,请稍后重试"
|
|
||||||
);
|
);
|
||||||
|
return createErrorResponse(500, "服务器错误,请稍后重试");
|
||||||
}
|
}
|
||||||
|
|
||||||
setNewApiAuthCookies(
|
setNewApiAuthCookies(
|
||||||
@@ -97,6 +98,7 @@ export default defineEventHandler(async (event) => {
|
|||||||
);
|
);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
clearNewApiAuthCookies(event);
|
clearNewApiAuthCookies(event);
|
||||||
|
consola.error("/api/auth/login 登录失败", error);
|
||||||
return createUpstreamErrorResponse(error, "登录失败");
|
return createUpstreamErrorResponse(error, "登录失败");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -113,6 +115,7 @@ const normalizeLoginResponse = (
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!isRecord(response)) {
|
if (!isRecord(response)) {
|
||||||
|
consola.error("/api/auth/login 登录失败:响应不是对象");
|
||||||
return {
|
return {
|
||||||
message: "登录失败",
|
message: "登录失败",
|
||||||
user: null
|
user: null
|
||||||
@@ -124,6 +127,7 @@ const normalizeLoginResponse = (
|
|||||||
wrapped.message || (wrapped.success ? "登录成功" : "登录失败");
|
wrapped.message || (wrapped.success ? "登录成功" : "登录失败");
|
||||||
|
|
||||||
if (wrapped.success !== true || !isUser(wrapped.data)) {
|
if (wrapped.success !== true || !isUser(wrapped.data)) {
|
||||||
|
consola.error("/api/auth/login 登录失败:上游返回的数据格式不正确");
|
||||||
return {
|
return {
|
||||||
message,
|
message,
|
||||||
user: null
|
user: null
|
||||||
|
|||||||
@@ -0,0 +1,26 @@
|
|||||||
|
import { consola } from "consola";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 请求日志中间件:记录每次请求的 method、路径、状态码和耗时。
|
||||||
|
* 不记录请求体和响应体,避免密码、token 等敏感信息泄漏。
|
||||||
|
*/
|
||||||
|
export default defineEventHandler((event) => {
|
||||||
|
const start = Date.now();
|
||||||
|
const method = event.node.req.method ?? "UNKNOWN";
|
||||||
|
const path = getRequestURL(event).pathname;
|
||||||
|
|
||||||
|
// 响应发送完毕后记录结果
|
||||||
|
event.node.res.on("finish", () => {
|
||||||
|
const status = event.node.res.statusCode;
|
||||||
|
const elapsed = Date.now() - start;
|
||||||
|
const log = `[${method}] ${path} → ${status} (${elapsed}ms)`;
|
||||||
|
|
||||||
|
if (status >= 500) {
|
||||||
|
consola.error(log);
|
||||||
|
} else if (status >= 400) {
|
||||||
|
consola.warn(log);
|
||||||
|
} else {
|
||||||
|
consola.info(log);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user