e41c457076
问题:
- session.server.ts 还在调用已删除的 generateUserId 函数
- 生成的 user 格式为 user_{APP_ID}:{sessionId},与后端期望的 username 不符
- 导致后端无法正确识别用户
修复:
- 移除 difyUtils 导入
- 移除 getSessionInfo 中的 user 字段生成
- 现在完全由后端从 JWT 中提取 username 管理 user 字段
影响:
- getSessionInfo 返回值不再包含 user 字段
- 所有 API 路由已经不再使用 session 中的 user
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
50 lines
1.4 KiB
TypeScript
50 lines
1.4 KiB
TypeScript
import { createCookieSessionStorage } from '@remix-run/node';
|
|
import { v4 as uuidv4 } from 'uuid';
|
|
|
|
// 创建会话存储
|
|
const sessionStorage = createCookieSessionStorage({
|
|
cookie: {
|
|
name: '__dify_session',
|
|
httpOnly: true,
|
|
path: '/',
|
|
sameSite: 'lax',
|
|
secrets: ['dify-chat-secret'], // 在生产环境中应该使用环境变量
|
|
secure: process.env.NODE_ENV === 'production',
|
|
maxAge: 60 * 60 * 24 * 30, // 30天
|
|
},
|
|
});
|
|
|
|
// 获取会话
|
|
export async function getSession(request: Request) {
|
|
const cookie = request.headers.get('Cookie');
|
|
return sessionStorage.getSession(cookie);
|
|
}
|
|
|
|
// 提交会话
|
|
export async function commitSession(session: any) {
|
|
return sessionStorage.commitSession(session);
|
|
}
|
|
|
|
// 获取或创建会话信息
|
|
// 注意:user 字段已移除,现在由后端从 JWT 自动提取 username
|
|
export async function getSessionInfo(request: Request) {
|
|
const session = await getSession(request);
|
|
|
|
let sessionId = session.get('sessionId');
|
|
if (!sessionId) {
|
|
sessionId = uuidv4();
|
|
session.set('sessionId', sessionId);
|
|
}
|
|
|
|
return {
|
|
sessionId,
|
|
session,
|
|
};
|
|
}
|
|
|
|
// 设置会话头部
|
|
export function setSessionHeaders(sessionId: string) {
|
|
return {
|
|
'Set-Cookie': `session_id=${sessionId}; Path=/; HttpOnly; SameSite=Lax; Max-Age=${60 * 60 * 24 * 30}`,
|
|
};
|
|
}
|