Skip to content

Commit c54f864

Browse files
perf: Authenticate invalid msg
1 parent 3704a67 commit c54f864

File tree

5 files changed

+23
-15
lines changed

5 files changed

+23
-15
lines changed

backend/apps/system/crud/user.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ def get_user_by_account(*, session: Session, account: str) -> BaseUserDTO | None
2626
@cache(namespace=CacheNamespace.AUTH_INFO, cacheName=CacheName.USER_INFO, keyExpression="user_id")
2727
async def get_user_info(*, session: Session, user_id: int) -> UserInfoDTO | None:
2828
db_user: UserModel = get_db_user(session = session, user_id = user_id)
29+
if not db_user:
30+
return None
2931
userInfo = UserInfoDTO.model_validate(db_user.model_dump())
3032
userInfo.isAdmin = userInfo.id == 1 and userInfo.account == 'admin'
3133
if userInfo.isAdmin:

backend/apps/system/middleware/auth.py

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,11 @@
1313
from common.core import security
1414
from common.core.config import settings
1515
from common.core.schemas import TokenPayload
16+
from common.utils.locale import I18n
1617
from common.utils.utils import SQLBotLogUtil
1718
from common.utils.whitelist import whiteUtils
1819
from fastapi.security.utils import get_authorization_scheme_param
20+
from common.core.deps import get_i18n
1921
class TokenMiddleware(BaseHTTPMiddleware):
2022

2123

@@ -29,27 +31,31 @@ async def dispatch(self, request, call_next):
2931
return await call_next(request)
3032
assistantTokenKey = settings.ASSISTANT_TOKEN_KEY
3133
assistantToken = request.headers.get(assistantTokenKey)
34+
trans = await get_i18n(request)
3235
#if assistantToken and assistantToken.lower().startswith("assistant "):
3336
if assistantToken:
3437
validator: tuple[any] = await self.validateAssistant(assistantToken)
3538
if validator[0]:
3639
request.state.current_user = validator[1]
3740
request.state.assistant = validator[2]
3841
return await call_next(request)
39-
return JSONResponse(f"Unauthorized:[{validator[1]}]", status_code=401, headers={"Access-Control-Allow-Origin": "*"})
42+
message = trans('i18n_permission.authenticate_invalid', msg = validator[1])
43+
return JSONResponse(message, status_code=401, headers={"Access-Control-Allow-Origin": "*"})
4044
#validate pass
4145
tokenkey = settings.TOKEN_KEY
4246
token = request.headers.get(tokenkey)
43-
validate_pass, data = await self.validateToken(token)
47+
validate_pass, data = await self.validateToken(token, trans)
4448
if validate_pass:
4549
request.state.current_user = data
4650
return await call_next(request)
47-
return JSONResponse(f"Unauthorized:[{data}]", status_code=401, headers={"Access-Control-Allow-Origin": "*"})
51+
52+
message = trans('i18n_permission.authenticate_invalid', msg = data)
53+
return JSONResponse(message, status_code=401, headers={"Access-Control-Allow-Origin": "*"})
4854

4955
def is_options(self, request: Request):
5056
return request.method == "OPTIONS"
5157

52-
async def validateToken(self, token: Optional[str]):
58+
async def validateToken(self, token: Optional[str], trans: I18n):
5359
if not token:
5460
return False, f"Miss Token[{settings.TOKEN_KEY}]!"
5561
schema, param = get_authorization_scheme_param(token)
@@ -63,17 +69,15 @@ async def validateToken(self, token: Optional[str]):
6369
with Session(engine) as session:
6470
session_user = await get_user_info(session = session, user_id = token_data.id)
6571
if not session_user:
66-
raise Exception(f"User not found with id: {token_data.id}")
72+
message = trans('i18n_not_exist', msg = trans('i18n_user.account'))
73+
raise Exception(message)
6774
session_user = UserInfoDTO.model_validate(session_user)
6875
if session_user.status != 1:
69-
raise Exception(f"User is not active!")
76+
message = trans('i18n_login.user_disable', msg = trans('i18n_concat_admin'))
77+
raise Exception(message)
7078
if not session_user.oid or session_user.oid == 0:
71-
raise Exception(f"User default space is not set!")
72-
""" if token_data.oid != session_user.oid:
73-
raise HTTPException(
74-
status_code=401,
75-
detail="Default space has been changed, please login again!"
76-
) """
79+
message = trans('i18n_login.no_associated_ws', msg = trans('i18n_concat_admin'))
80+
raise Exception(message)
7781
return True, session_user
7882
except Exception as e:
7983
SQLBotLogUtil.exception(f"Token validation error: {str(e)}")

backend/locales/en.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@
2424
},
2525
"i18n_permission": {
2626
"only_admin": "Only administrators can call this!",
27-
"no_permission": "No permission to access {url}{msg}"
27+
"no_permission": "No permission to access {url}{msg}",
28+
"authenticate_invalid": "Authenticate invalid [{msg}]"
2829
},
2930
"i18n_llm": {
3031
"validate_error": "Validation failed [{msg}]",

backend/locales/zh-CN.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@
2424
},
2525
"i18n_permission": {
2626
"only_admin": "仅支持管理员调用!",
27-
"no_permission": "无权调用{url}{msg}"
27+
"no_permission": "无权调用{url}{msg}",
28+
"authenticate_invalid": "认证无效【{msg}】"
2829

2930
},
3031
"i18n_llm": {

frontend/src/utils/request.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ class HttpService {
182182
setTimeout(() => {
183183
wsCache.delete('user.token')
184184
window.location.reload()
185-
}, 1000)
185+
}, 2000)
186186
return
187187
// break
188188
case 403:

0 commit comments

Comments
 (0)