fix(admin): Flask 代理转发 Java 默认携带内部令牌与 operatorId
Build Backend JAR / build (push) Has been cancelled
Build Backend JAR / build (push) Has been cancelled
A1 收敛后 Java 管理接口普遍要求 require* 身份,而浏览器打到 15124 的 请求不带 Java JWT/aiimage_token Cookie,list_shop_manages 等裸代理调用 只转发浏览器 Cookie,被 Java 判未登录,生产后台店铺列表报「加载失败: 未登录」。_proxy_backend_java 默认补 X-Internal-Token(凭 Flask 侧会话 校验通过的管理员身份)+ 自动注入当前操作用户 operatorId,修复同批全部 裸代理调用的 401;显式传身份参数或 use_internal_token=False 可绕过, 供转发浏览器原始 JWT 的场景。新增回归测试锁定默认行为。
This commit is contained in:
@@ -277,6 +277,16 @@ def _backend_java_internal_request():
|
||||
return headers, {'operatorId': operator_id}
|
||||
|
||||
|
||||
def _resolve_current_operator_id():
|
||||
"""取当前请求上下文里的操作用户 id(Flask 已登录管理员),无上下文/未登录返回 None。"""
|
||||
if not has_request_context():
|
||||
return None
|
||||
request_row = getattr(g, '_current_user_row', None)
|
||||
if request_row and request_row.get('id'):
|
||||
return request_row.get('id')
|
||||
return session.get('user_id')
|
||||
|
||||
|
||||
def _proxy_backend_java(
|
||||
method,
|
||||
path,
|
||||
@@ -287,9 +297,27 @@ def _proxy_backend_java(
|
||||
data=None,
|
||||
timeout=10,
|
||||
headers=None,
|
||||
use_internal_token=True,
|
||||
):
|
||||
"""调用 backend-java。
|
||||
|
||||
use_internal_token 默认 True:以可信内部令牌标识"已通过 Flask 侧校验的
|
||||
管理员"(Java 管理接口在 A1 收敛后普遍要求 require* 身份,而浏览器打到
|
||||
15124 的请求不带 Java JWT/aiimage_token Cookie,若不补内部令牌,Flask
|
||||
校验通过后仍会被 Java 判"未登录")。Java 内部兼容通道要求
|
||||
X-Internal-Token + operatorId 双条件,因此同时自动补当前操作用户 id;
|
||||
调用方显式传的 operatorId/operator_id 优先。需要转发浏览器原始鉴权材料
|
||||
(JWT,且调用方自行带身份参数)的场景应显式传 use_internal_token=False。
|
||||
"""
|
||||
url = f"{backend_java_base_url}{path}"
|
||||
forwarded_headers = _backend_java_forward_headers()
|
||||
if use_internal_token:
|
||||
forwarded_headers['X-Internal-Token'] = _resolve_internal_token()
|
||||
if params and not any(key in params for key in ('operatorId', 'operator_id')):
|
||||
operator_id = _resolve_current_operator_id()
|
||||
if operator_id:
|
||||
params = dict(params)
|
||||
params['operatorId'] = operator_id
|
||||
if headers:
|
||||
forwarded_headers.update(headers)
|
||||
try:
|
||||
|
||||
Reference in New Issue
Block a user