Explorar o código

Merge branch '1.1.3-lxg' into 1.1.3-master

liangxunge hai 2 meses
pai
achega
4ced9519ab

+ 23 - 5
api/controllers/console/explore/completion.py

@@ -31,7 +31,7 @@ from core.errors.error import (
 from core.model_runtime.errors.invoke import InvokeError
 from extensions.ext_database import db
 from libs import helper
-from libs.helper import uuid_value
+from libs.helper import extract_remote_ip, uuid_value
 from models.model import AppMode
 from services.app_generate_service import AppGenerateService
 from services.errors.llm import InvokeRateLimitError
@@ -180,10 +180,26 @@ class ChatApiForRobot(Resource):
         }
 
         # 3) 获取用户token,封装请求头
-        # access_token = RobotAccountService.login("suhh@mail.com.cn", "tj123456")
-        access_token = RobotAccountService.get_account_access_token("suhh@mail.com.cn")
-        if access_token is None:
-            access_token = RobotAccountService.login("suhh@mail.com.cn", "tj123456")
+        login_json = {
+            "email": "suhh@mail.com.cn",
+            "password": "tj123456",
+        }
+
+        # 3.1) 方案1:每次login
+        access_token = RobotAccountService.login(login_json["email"], login_json["password"])
+
+        # # 3.2) 方案2:login后将access_token写入redis,根据是否能够从redis取得内容判断
+        # access_token = RobotAccountService.get_account_access_token(login_json["email"])
+        # # access_token = None
+        # if access_token is None:
+        #     # 3.2.1) 方案2-1:调用登录接口,使用返回的access_token
+        #     login_response = requests.post(f"{request.host_url}console/api/login", json=login_json)
+        #     access_token = login_response.json()["data"]["access_token"]
+        #     access_token_key = RobotAccountService._get_access_token_key(login_json["email"])
+        #     redis_client.setex(access_token_key, ACCESS_TOKEN_EXPIRY, access_token)
+        #
+        #     # 3.2.2) 方案2-2:调用service层封装的login方法,使用返回的access_token
+        #     access_token = RobotAccountService.login(login_json["email"], login_json["password"])
 
         headers = {
             "Content-Type": "application/json",
@@ -193,6 +209,8 @@ class ChatApiForRobot(Resource):
             "Connection": "keep-alive",
         }
 
+        logging.info(f"Robot request: {extract_remote_ip(request)}")
+
         # 4) 封装请求url并发送请求
         chat_message_url = f'{request.host_url}console/api/installed-apps/{installed_app_id}/chat-messages'
         logging.info("Sending request to %s", chat_message_url)

+ 3 - 8
api/services/robot_account_service.py

@@ -5,7 +5,7 @@ from typing import Optional
 from configs import dify_config
 from extensions.ext_redis import redis_client
 from libs.passport import PassportService
-from models import Account, AccountStatus, db
+from models import Account
 from services.account_service import AccountService
 
 ACCESS_TOKEN_PREFIX = "access_token:"
@@ -17,14 +17,9 @@ class RobotAccountService:
     def login(email: str, password: str, *, ip_address: Optional[str] = None) -> str:
         account = AccountService.authenticate(email, password)
 
-        if ip_address:
-            AccountService.update_login_info(account=account, ip_address=ip_address)
+        token_pair = AccountService.login(account=account, ip_address=ip_address)
 
-        if account.status == AccountStatus.PENDING.value:
-            account.status = AccountStatus.ACTIVE.value
-            db.session.commit()
-
-        access_token = RobotAccountService.get_account_jwt_token(account=account)
+        access_token = token_pair.access_token
         access_token_key = RobotAccountService._get_access_token_key(email)
         redis_client.setex(access_token_key, ACCESS_TOKEN_EXPIRY, access_token)