This commit is contained in:
Baobhan Sith
2025-04-20 15:49:40 +08:00
parent 94bd95064a
commit 82808ca716
4 changed files with 13 additions and 13 deletions
+1
View File
@@ -138,3 +138,4 @@ dist
*.jpg
/packages/backend/uploads/backgrounds
/temp_iterm_schemes
/packages/backend/sessions
+8 -9
View File
@@ -118,12 +118,11 @@ export const login = async (req: Request, res: Response): Promise<void> => {
// 根据 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<void>
// 根据之前存储在 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;
+3 -3
View File
@@ -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'
}
+1 -1
View File
@@ -49,7 +49,7 @@ const handleSubmit = async () => {
<!-- 新增记住我复选框 -->
<div class="form-group form-group-checkbox">
<input type="checkbox" id="rememberMe" v-model="rememberMe" :disabled="isLoading" />
<label for="rememberMe">{{ t('login.rememberMe') }}</label>
<label for="rememberMe">记住我</label>
</div>
</div>