提交 0f81f49d 作者: yueyang.lv

refactor(登陆): 登陆逻辑重构,解决冲突

登陆逻辑函数拆分,职责划分
......@@ -44,10 +44,13 @@
"chart.js": "^2.9.3"
},
"scripts": {
"start": "PORT=5005 react-app-rewired start",
"server_install": "yarn --registry=https://registry.npmjs.org/",
"server_build": "react-app-rewired build",
"build": "react-app-rewired build",
"start": "PORT=5005 REACT_APP_SATURN_ENV=tenant react-app-rewired start",
"start:private": "PORT=5005 REACT_APP_SATURN_ENV=private react-app-rewired start",
"server_build": "npm run build",
"server_build:private": "npm run build:private",
"build": "REACT_APP_SATURN_ENV=tenant react-app-rewired build",
"build:private": "REACT_APP_SATURN_ENV=private react-app-rewired build",
"build:local_test": "REACT_APP_LOCAL_TEST=true REMOTE_URL=https://loclhost.kube.ucas:9001 npm run build",
"test": "react-scripts test",
"eject": "react-scripts eject"
......
/// <reference types="react-scripts" />
declare namespace NodeJS {
interface ProcessEnv {
readonly NODE_ENV: "development" | "production" | "test";
readonly PUBLIC_URL: string;
readonly REACT_APP_SATURN_ENV?: "private" | "tenant";
}
}
declare module "saturn_tenant/*";
......@@ -357,10 +357,6 @@ const Login = ({
});
};
// 关闭此页,使用自有登录页
toLoginPage({ replace: true, callbackUrl: false });
return null;
useEffect(() => {
if (loadingFetchConfiguration) {
api
......@@ -582,4 +578,15 @@ const Login = ({
);
};
export default connector(withStyles(styles)(Login));
/** 非私有部署时关闭这个登录页 */
const TenantLogin = () => {
// 关闭此页,使用自有登录页
toLoginPage({ replace: true, callbackUrl: false });
return null;
};
export default connector(
withStyles(styles)(
process.env.REACT_APP_SATURN_ENV === "private" ? Login : TenantLogin
)
);
......@@ -2,36 +2,92 @@ interface ToLoginPageOptions {
callbackUrl?: boolean | string;
replace?: boolean;
}
/** 跳转到登录页 */
export const toLoginPage = (options?: ToLoginPageOptions): void => {
let { callbackUrl = true } = options || {};
const { replace = false } = options || {};
if (typeof callbackUrl === "boolean" && callbackUrl) {
// 如果是 true 就是用当前 url 作为登录成功后回调地址
callbackUrl = encodeURIComponent(window.location.href);
}
const queryStr = callbackUrl ? `?callbackUrl=${callbackUrl}` : "";
let url = `/saturn/fullscreen/login${queryStr}`;
// 本地测试环境时使用子模块跳转
if (process.env.REACT_APP_LOCAL_TEST) {
console.warn("当前为本地测试环境,已关闭登录跳转官网");
window.location.href = url;
return;
/** 转换 callbackUrl */
function callbackUrl2query(url: ToLoginPageOptions["callbackUrl"] = true) {
let _url = url;
if (typeof _url === "boolean" && _url) {
// 如果是 true 就是用当前 url 作为登录成功后回调地址
_url = encodeURIComponent(window.location.href);
}
const query = url ? `?callbackUrl=${_url}` : "";
return query;
}
/** 区分正式和测试环境返回不同的 url */
function formatUrl(url: string, query: string) {
let _url = `${url}${query}`;
if (process.env.NODE_ENV === "production") {
let loginUrl = `https://xxyy.co/#/login${queryStr}`;
// 测试环境
if (window.location.host.endsWith(".kube.ucas")) {
loginUrl = `https://test-www.kube.ucas/login${queryStr}`;
// 测试环境
_url = `https://test-www.kube.ucas/login${query}`;
} else {
// 正式环境
_url = `https://xxyy.co/#/login${query}`;
}
url = loginUrl;
}
return _url;
}
/** 页面跳转 */
function toHandler(url: string, replace: boolean) {
if (replace) {
window.location.replace(url);
} else {
window.location.href = url;
}
}
/**
* 私有部署登录
* */
function toLoginPrivate({
replace = false,
callbackUrl,
}: ToLoginPageOptions = {}) {
const queryStr = callbackUrl2query(callbackUrl);
// 私有部署没有租户相关业务,使用 minio 自有登录页
const url = formatUrl(`/login`, queryStr);
toHandler(url, replace);
}
/**
* 租户版本登陆
* */
function toLoginTenant({
replace = false,
callbackUrl,
}: ToLoginPageOptions = {}) {
const queryStr = callbackUrl2query(callbackUrl);
// 租户版,使用自有登录页
const url = formatUrl(`/saturn/fullscreen/login`, queryStr);
toHandler(url, replace);
}
/**
* 模块联邦本地测试环境登陆
* */
function toLoginLocalTest({ callbackUrl }: ToLoginPageOptions = {}) {
const queryStr = callbackUrl2query(callbackUrl);
const url = `/saturn/fullscreen/login${queryStr}`;
toHandler(url, false);
}
/** 跳转到登录页 */
export const toLoginPage = (options?: ToLoginPageOptions): void => {
if (process.env.REACT_APP_SATURN_ENV === "private") {
toLoginPrivate(options);
return;
}
if (process.env.REACT_APP_LOCAL_TEST) {
toLoginLocalTest(options);
return;
}
toLoginTenant(options);
};
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论