diff --git a/Merge/back_rhj/app/routes.py b/Merge/back_rhj/app/routes.py
index f123a84..6f159ca 100644
--- a/Merge/back_rhj/app/routes.py
+++ b/Merge/back_rhj/app/routes.py
@@ -1,6 +1,7 @@
 from flask import Blueprint, request, jsonify
 from .functions.FAuth import FAuth
-from .services.recommendation_service import RecommendationService
+from app.services.recommendation_service import RecommendationService
+from app.utils.graph_build import build_user_post_graph
 from sqlalchemy import create_engine
 from sqlalchemy.orm import sessionmaker
 from config import Config
@@ -17,7 +18,10 @@
     @wraps(f)
     def decorated(*args, **kwargs):
         token = request.headers.get('Authorization')
+        print(f"收到的Authorization头: {token}")
+        
         if not token:
+            print("缺少Authorization头")
             return jsonify({'success': False, 'message': '缺少访问令牌'}), 401
         
         session = None
@@ -25,22 +29,35 @@
             # 移除Bearer前缀
             if token.startswith('Bearer '):
                 token = token[7:]
+                print(f"提取的token: {token[:20]}...")
             
             engine = create_engine(Config.SQLURL)
             SessionLocal = sessionmaker(bind=engine)
             session = SessionLocal()
             f_auth = FAuth(session)
             
+            # 验证token
+            token_data = f_auth.verify_token(token)
+            print(f"Token验证结果: {token_data}")
+            
+            if not token_data:
+                print("Token验证失败 - token无效")
+                return jsonify({'success': False, 'message': '无效的访问令牌'}), 401
+            
             user = f_auth.get_user_by_token(token)
             if not user:
+                print("根据token获取用户失败")
                 return jsonify({'success': False, 'message': '无效的访问令牌'}), 401
             
+            print(f"Token验证成功，用户: {user.username}, ID: {user.id}")
+            
             # 将用户信息传递给路由函数
             return f(user, *args, **kwargs)
         except Exception as e:
+            print(f"Token验证异常: {str(e)}")
             if session:
                 session.rollback()
-            return jsonify({'success': False, 'message': '令牌验证失败'}), 401
+            return jsonify({'success': False, 'message': f'令牌验证失败: {str(e)}'}), 401
         finally:
             if session:
                 session.close()
@@ -368,12 +385,12 @@
     try:
         data = request.get_json() or {}
         user_id = data.get('user_id') or current_user.id
-        topk = data.get('topk', 10)  # 默认推荐10个
         
-        print(f"为用户 {user_id} 获取推荐，数量: {topk}")
+        print(f"为用户 {user_id} 获取个性化推荐")
         
         # 调用推荐系统
-        recommendations = recommendation_service.get_recommendations(user_id, topk)
+        user2idx, post2idx = build_user_post_graph(return_mapping=True)
+        recommendations = recommendation_service.get_recommendations(float(user_id), topk=10)
         
         return jsonify({
             'success': True,
