1
This commit is contained in:
@@ -5,15 +5,18 @@ const proxy = require("../service/biz_proxy_service");
|
||||
|
||||
|
||||
/**
|
||||
* 从请求中提取 Token
|
||||
* 支持 Authorization: Bearer xxx 和 query ?token=xxx
|
||||
* 从 ctx 请求头中提取 Token(不含 query)
|
||||
* - Authorization: Bearer <token>
|
||||
* - Authorization: <token>(无 Bearer 前缀时整段作为 token)
|
||||
* - X-Api-Token / X-Token
|
||||
*/
|
||||
function extractToken(ctx) {
|
||||
const authHeader = ctx.get("Authorization") || "";
|
||||
if (authHeader.startsWith("Bearer ")) {
|
||||
return authHeader.slice(7).trim();
|
||||
|
||||
let x_token = ctx.headers['authorization'] || ''
|
||||
if (x_token.startsWith("Bearer ")) {
|
||||
x_token = x_token.slice(7).trim();
|
||||
}
|
||||
return ctx.query.token || "";
|
||||
return x_token;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -26,6 +29,14 @@ function pickFeature(spec) {
|
||||
return null;
|
||||
}
|
||||
|
||||
/** 不参与转发的文档路径(与 framework 实际路由重叠或仅为说明) */
|
||||
function should_skip_proxy_path(route_path) {
|
||||
return (
|
||||
route_path.startsWith("/admin_api") ||
|
||||
route_path.startsWith("/api/auth")
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建转发路由表(供 framework.addRoutes 注册)
|
||||
*/
|
||||
@@ -33,6 +44,9 @@ function buildProxyRoutes() {
|
||||
const routes = {};
|
||||
|
||||
for (const [path, methods] of Object.entries(swagger.paths)) {
|
||||
if (should_skip_proxy_path(path)) {
|
||||
continue;
|
||||
}
|
||||
for (const [method, spec] of Object.entries(methods)) {
|
||||
const routeKey = `${method.toUpperCase()} ${path}`;
|
||||
|
||||
@@ -51,10 +65,8 @@ function buildProxyRoutes() {
|
||||
ctx.fail(authResult.message || "鉴权失败");
|
||||
return;
|
||||
}
|
||||
|
||||
// 3. 组装 query(去掉 token 参数,避免泄露)
|
||||
// 3. 组装 query
|
||||
const query = { ...ctx.query };
|
||||
delete query.token;
|
||||
|
||||
// 4. 转发到上游
|
||||
const result = await proxy.forwardRequest({
|
||||
@@ -68,7 +80,7 @@ function buildProxyRoutes() {
|
||||
|
||||
// 5. 根据上游 Success 字段决定响应方式
|
||||
const upstream = result.data;
|
||||
if (upstream && upstream.Success === true) {
|
||||
if (upstream && upstream.Code === 200) {
|
||||
ctx.success(upstream);
|
||||
} else {
|
||||
ctx.fail(upstream && upstream.Text ? upstream.Text : "上游请求失败", upstream);
|
||||
|
||||
Reference in New Issue
Block a user