193c02eda8
SSO 写入 sessionStorage,fetch 自动带 X-Hub-Embed-SSO,避免期权链 API 401。 Co-authored-by: Cursor <cursoragent@cursor.com>
64 lines
1.6 KiB
JavaScript
64 lines
1.6 KiB
JavaScript
/**
|
|
* 中控 iframe 嵌入鉴权:跨站时第三方 Cookie 常被拦截,改用 embed_sso 头维持登录.
|
|
* 须在其它业务脚本之前加载.
|
|
*/
|
|
(function () {
|
|
"use strict";
|
|
var KEY = "hub_embed_sso";
|
|
try {
|
|
var q = new URLSearchParams(location.search || "");
|
|
var fromUrl = (q.get("embed_sso") || "").trim();
|
|
if (fromUrl) {
|
|
sessionStorage.setItem(KEY, fromUrl);
|
|
q.delete("embed_sso");
|
|
var next = location.pathname;
|
|
var rest = q.toString();
|
|
if (rest) next += "?" + rest;
|
|
next += location.hash || "";
|
|
history.replaceState(null, "", next);
|
|
}
|
|
} catch (_) {}
|
|
|
|
function currentToken() {
|
|
try {
|
|
return (sessionStorage.getItem(KEY) || "").trim();
|
|
} catch (_) {
|
|
return "";
|
|
}
|
|
}
|
|
|
|
function withAuthHeaders(init) {
|
|
var tok = currentToken();
|
|
if (!tok) return init;
|
|
init = init ? Object.assign({}, init) : {};
|
|
var headers;
|
|
try {
|
|
headers = new Headers(init.headers || {});
|
|
} catch (_) {
|
|
headers = new Headers();
|
|
}
|
|
if (!headers.has("X-Hub-Embed-SSO")) {
|
|
headers.set("X-Hub-Embed-SSO", tok);
|
|
}
|
|
init.headers = headers;
|
|
if (!init.credentials) init.credentials = "same-origin";
|
|
return init;
|
|
}
|
|
|
|
if (typeof window.fetch === "function") {
|
|
var origFetch = window.fetch.bind(window);
|
|
window.fetch = function (input, init) {
|
|
return origFetch(input, withAuthHeaders(init));
|
|
};
|
|
}
|
|
|
|
window.HubEmbedAuth = {
|
|
token: currentToken,
|
|
clear: function () {
|
|
try {
|
|
sessionStorage.removeItem(KEY);
|
|
} catch (_) {}
|
|
},
|
|
};
|
|
})();
|