You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在single-spa中实现未认证用户不加载微前端并跳转登录?

实现基于认证状态的微前端加载控制

1. 全局维护认证状态

在根配置文件中添加认证状态管理,从本地存储读取初始状态,同时提供状态更新方法供登录微前端调用:

// 从localStorage读取初始认证状态,登录成功后更新
let isAuthenticated = !!localStorage.getItem('authToken');

// 全局状态更新方法,供登录微前端触发
window.updateAuthStatus = (status: boolean) => {
  isAuthenticated = status;
  // 触发single-spa重新评估应用激活状态
  singleSpa.triggerAppChange();
};

2. 改造仪表盘应用的激活逻辑

在activeWhen中加入认证判断,未认证访问仪表盘时自动跳转登录页,且不加载该微前端:

registerApplication({
  name: "@app/dashboard",
  app: () => System.import<LifeCycles>("@app/dashboard"),
  activeWhen: (location) => {
    const isDashboardPath = location.pathname === '/dashboard';
    // 未认证且访问仪表盘时跳转登录页
    if (isDashboardPath && !isAuthenticated) {
      location.href = '/';
    }
    // 仅当已认证且路径匹配时激活应用
    return isDashboardPath && isAuthenticated;
  }
});

3. 登录微前端处理认证成功逻辑

在登录组件的成功回调中,存储认证凭证并通知根配置更新状态:

// 登录组件内的登录成功处理
loginSuccess(token: string) {
  localStorage.setItem('authToken', token);
  // 调用全局方法更新认证状态
  (window as any).updateAuthStatus(true);
  // 跳转至仪表盘
  window.location.href = '/dashboard';
}

4. 初始加载时的路由校正

在根配置初始化阶段,处理已认证用户访问登录页的情况:

// 初始化时校验:已认证但在登录页则跳转仪表盘
if (isAuthenticated && location.pathname === '/') {
  location.href = '/dashboard';
}

通过以上步骤即可实现:

  • 未认证用户访问受保护微前端时,自动跳转登录页且不加载目标应用
  • 登录成功后自动更新状态并激活对应微前端
  • 已认证用户访问登录页时自动跳转至目标页面

内容的提问来源于stack exchange,提问作者damanchola

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 08:38:04