身份令牌验证与推荐接口
Change-Id: I572c2e74b9336f2f472805d164969656278dfd8d
diff --git a/Merge/back_rhj/app/routes.py b/Merge/back_rhj/app/routes.py
index 23ff49b..f123a84 100644
--- a/Merge/back_rhj/app/routes.py
+++ b/Merge/back_rhj/app/routes.py
@@ -1,5 +1,6 @@
from flask import Blueprint, request, jsonify
from .functions.FAuth import FAuth
+from .services.recommendation_service import RecommendationService
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from config import Config
@@ -8,6 +9,9 @@
main = Blueprint('main', __name__)
+# 初始化推荐服务
+recommendation_service = RecommendationService()
+
def token_required(f):
"""装饰器:需要令牌验证"""
@wraps(f)
@@ -322,4 +326,69 @@
return jsonify({
'success': False,
'message': f'JWT令牌验证失败: {str(e)}'
- }), 500
\ No newline at end of file
+ }), 500
+
+@main.route('/verify_user', methods=['POST'])
+@token_required
+def verify_user(current_user):
+ """测试JWT令牌接口(需要登录)"""
+ try:
+ # 获取当前请求的token(从装饰器已验证的Authorization header)
+ auth_header = request.headers.get('Authorization')
+ current_token = auth_header[7:] if auth_header and auth_header.startswith('Bearer ') else None
+
+ print(f"当前用户: {current_user.username}")
+ print(f"当前用户ID: {current_user.id}")
+ print(current_user.role)
+ print(f"Token验证成功: {current_token[:20]}..." if current_token else "No token")
+
+ # 可选:检查请求体中是否有额外的token需要验证
+ data = request.get_json() or {}
+ additional_token = data.get('token')
+
+ response_data = {
+ 'success': True,
+ 'userid': current_user.id,
+ 'role': current_user.role,
+ }
+
+ return jsonify(response_data), 200
+
+ except Exception as e:
+ print(f"用户验证错误: {str(e)}")
+ return jsonify({
+ 'success': False,
+ 'message': f'JWT令牌验证失败: {str(e)}'
+ }), 500
+
+@main.route('/recommend', methods=['POST'])
+@token_required
+def get_recommendations(current_user):
+ """获取个性化推荐接口"""
+ 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}")
+
+ # 调用推荐系统
+ recommendations = recommendation_service.get_recommendations(user_id, topk)
+
+ return jsonify({
+ 'success': True,
+ 'data': {
+ 'user_id': user_id,
+ 'recommendations': recommendations,
+ 'count': len(recommendations),
+ 'type': 'personalized'
+ },
+ 'message': '个性化推荐获取成功'
+ }), 200
+
+ except Exception as e:
+ print(f"推荐系统错误: {str(e)}")
+ return jsonify({
+ 'success': False,
+ 'message': f'推荐获取失败: {str(e)}'
+ }), 500