修复Dify对话记录加载问题:移除user参数,由后端自动管理

问题描述:
- 用户登录后无法加载历史对话记录
- 根本原因:前端传递的user值与实际用户不一致,导致Dify无法找到对应的对话

解决方案:
- 后端已实现user字段自动填充功能(v1.2.7-post2)
- 前端采用方案A:完全移除user参数传递
- 让后端从JWT中自动提取username并管理user字段

修改内容:
1. dify-client.server.ts
   - 移除所有方法的user参数
   - GET请求移除user查询参数
   - POST/DELETE请求移除user字段
   - 移除generateUserId工具函数

2. 所有API路由
   - 移除getSessionInfo中的user解构
   - 移除difyClient方法调用中的user参数传递
   - 日志中移除user信息输出

影响接口:
- GET /dify/conversations - 会话列表
- GET /dify/messages - 消息历史
- POST /dify/chat-messages - 发送消息
- POST /dify/conversations/{id}/name - 重命名会话
- DELETE /dify/conversations/{id} - 删除会话
- POST /dify/messages/{id}/feedbacks - 消息反馈

参考文档:docs/dify-frontend-user-field-guide.md

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-10-30 10:37:45 +08:00
parent 05cc992c78
commit 3254cec5ca
8 changed files with 395 additions and 40 deletions
+12 -22
View File
@@ -81,15 +81,11 @@ const difyFetch = async (endpoint: string, options: RequestInit = {}, jwt?: stri
return response;
};
// 生成用户ID
const generateUserId = (sessionId: string) => {
return `user_${DIFY_CONFIG.APP_ID}:${sessionId}`;
};
// Dify API 客户端 - 所有方法都需要传入 JWT
// 注意:user 参数已移除,由后端自动从 JWT 中提取 username
export const difyClient = {
// 获取应用参数
async getApplicationParameters(user: string, jwt?: string) {
async getApplicationParameters(jwt?: string) {
const response = await difyFetch('parameters', {
method: 'GET',
}, jwt);
@@ -97,9 +93,8 @@ export const difyClient = {
},
// 获取会话列表
async getConversations(user: string, jwt?: string) {
async getConversations(jwt?: string) {
const params = new URLSearchParams({
user,
limit: '100',
first_id: '',
});
@@ -111,9 +106,8 @@ export const difyClient = {
},
// 获取会话消息
async getConversationMessages(user: string, conversationId: string, jwt?: string) {
async getConversationMessages(conversationId: string, jwt?: string) {
const params = new URLSearchParams({
user,
conversation_id: conversationId,
limit: '20',
last_id: '',
@@ -129,7 +123,6 @@ export const difyClient = {
async createChatMessage(
inputs: Record<string, any>,
query: string,
user: string,
responseMode: string = 'streaming',
conversationId?: string,
files?: any[],
@@ -138,7 +131,7 @@ export const difyClient = {
const body = {
inputs,
query,
user,
// user 字段已移除,后端会自动从 JWT 中提取 username
response_mode: responseMode,
conversation_id: conversationId,
files: files || [],
@@ -147,7 +140,6 @@ export const difyClient = {
console.log('🌐 [DifyClient] 发送聊天消息:', {
queryLength: query.length,
queryPreview: query.substring(0, 100) + (query.length > 100 ? '...' : ''),
user,
responseMode,
conversationId,
hasInputs: !!inputs && Object.keys(inputs).length > 0,
@@ -181,11 +173,11 @@ export const difyClient = {
},
// 重命名会话
async renameConversation(conversationId: string, name: string, user: string, autoGenerate: boolean = false, jwt?: string) {
async renameConversation(conversationId: string, name: string, autoGenerate: boolean = false, jwt?: string) {
const body = {
name,
auto_generate: autoGenerate,
user,
// user 字段已移除,后端会自动从 JWT 中提取 username
};
const response = await difyFetch(`conversations/${conversationId}/name`, {
@@ -196,10 +188,9 @@ export const difyClient = {
},
// 删除会话
async deleteConversation(conversationId: string, user: string, jwt?: string) {
const body = {
user,
};
async deleteConversation(conversationId: string, jwt?: string) {
// user 字段已移除,后端会自动从 JWT 中提取 username
const body = {};
const response = await difyFetch(`conversations/${conversationId}`, {
method: 'DELETE',
@@ -209,10 +200,10 @@ export const difyClient = {
},
// 更新消息反馈
async updateMessageFeedback(messageId: string, rating: 'like' | 'dislike' | null, user: string, jwt?: string) {
async updateMessageFeedback(messageId: string, rating: 'like' | 'dislike' | null, jwt?: string) {
const body = {
rating,
user,
// user 字段已移除,后端会自动从 JWT 中提取 username
};
const response = await difyFetch(`messages/${messageId}/feedbacks`, {
@@ -225,6 +216,5 @@ export const difyClient = {
// 工具函数
export const difyUtils = {
generateUserId,
getConfig: () => DIFY_CONFIG,
};