diff --git a/.gitignore b/.gitignore index 91f91f4..189d467 100644 --- a/.gitignore +++ b/.gitignore @@ -138,3 +138,4 @@ dist *.jpg /packages/backend/uploads/backgrounds /temp_iterm_schemes +/packages/backend/sessions diff --git a/packages/backend/src/auth/auth.controller.ts b/packages/backend/src/auth/auth.controller.ts index 3298dad..4880acb 100644 --- a/packages/backend/src/auth/auth.controller.ts +++ b/packages/backend/src/auth/auth.controller.ts @@ -118,12 +118,11 @@ export const login = async (req: Request, res: Response): Promise => { // 根据 rememberMe 设置 cookie maxAge if (rememberMe) { - // 如果记住我,使用默认的 maxAge (在 index.ts 中设置,通常是 7 天) - // 如果需要强制覆盖为 7 天,取消下一行注释 - // req.session.cookie.maxAge = 1000 * 60 * 60 * 24 * 7; + // 如果勾选了“记住我”,设置 cookie 有效期为 1 年 (毫秒) + req.session.cookie.maxAge = 31536000000; // 1 year = 365 * 24 * 60 * 60 * 1000 } else { - // 如果不记住我,设置为会话 cookie (浏览器关闭时过期) - req.session.cookie.maxAge = undefined; // 使用 undefined 表示会话 cookie + // 如果未勾选,则不设置 maxAge,使其成为会话 cookie + req.session.cookie.maxAge = undefined; // 或者 null } res.status(200).json({ @@ -250,11 +249,11 @@ export const verifyLogin2FA = async (req: Request, res: Response): Promise // 根据之前存储在 session 中的 rememberMe 设置 cookie maxAge if (req.session.rememberMe) { - // 如果记住我,使用默认的 maxAge - // req.session.cookie.maxAge = 1000 * 60 * 60 * 24 * 7; + // 如果勾选了“记住我”,设置 cookie 有效期为 1 年 (毫秒) + req.session.cookie.maxAge = 31536000000; // 1 year } else { - // 如果不记住我,设置为会话 cookie - req.session.cookie.maxAge = undefined; + // 如果未勾选,则不设置 maxAge,使其成为会话 cookie + req.session.cookie.maxAge = undefined; // 或者 null } // 清除临时的 rememberMe 状态 delete req.session.rememberMe; diff --git a/packages/backend/src/index.ts b/packages/backend/src/index.ts index 27baa4d..a3d904a 100644 --- a/packages/backend/src/index.ts +++ b/packages/backend/src/index.ts @@ -39,7 +39,7 @@ app.set('trust proxy', true); // const SQLiteStore = connectSqlite3(session); // 移除旧的 Store 初始化 // 使用 process.cwd() 获取项目根目录,然后拼接路径,确保路径一致性 // console.log('[Index CWD 1]', process.cwd()); // 移除调试日志 -const dbPath = path.join(process.cwd(), 'data'); // Correct path relative to CWD (packages/backend) +// const dbPath = path.join(process.cwd(), 'data'); // 移除未使用的变量 // --- 中间件 --- // !! 重要:IP 白名单应尽可能早地应用,通常在其他中间件之前 !! @@ -132,7 +132,7 @@ const startServer = () => { const sessionMiddleware = session({ store: new FileStore({ path: sessionsPath, // 指定会话文件存储目录 - ttl: 60 * 60 * 24 * 7, // 会话有效期 (秒),7天,匹配 cookie maxAge (需要秒) + ttl: 31536000, // 会话有效期 (秒),设置为 1 年,确保服务器端会话数据长期存在 // logFn: (message) => { console.log('[SessionFileStore]', message); } // 移除调试日志 // reapInterval: 3600 // 清理过期会话间隔 (秒),默认1小时 }), @@ -140,7 +140,7 @@ const startServer = () => { resave: false, saveUninitialized: false, cookie: { - maxAge: 1000 * 60 * 60 * 24 * 7, + // maxAge: 1000 * 60 * 60 * 24 * 7, // 移除固定的 cookie maxAge,默认为会话期 httpOnly: true, secure: process.env.NODE_ENV === 'production' } diff --git a/packages/frontend/src/views/LoginView.vue b/packages/frontend/src/views/LoginView.vue index 108fce3..10cf2be 100644 --- a/packages/frontend/src/views/LoginView.vue +++ b/packages/frontend/src/views/LoginView.vue @@ -49,7 +49,7 @@ const handleSubmit = async () => {
- +