update
This commit is contained in:
@@ -138,3 +138,4 @@ dist
|
||||
*.jpg
|
||||
/packages/backend/uploads/backgrounds
|
||||
/temp_iterm_schemes
|
||||
/packages/backend/sessions
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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'
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user