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

同一域名下Ember.js多应用如何实现已登录应用免密共享会话令牌

实现同域名下Ember.js多应用共享登录状态

问题核心是你给每个应用的session存储设置了独立标识——cookieName和localStorageKey分别用了appA、appB、appC,导致三个应用读写不同的存储位置,没法共享登录状态。要实现/appB登录后/appC自动免密登录,按以下步骤调整:

1. 统一session存储的键名

把三个应用的app/session-stores/application.js里的cookieName和localStorageKey改成同一个值,比如shared-app-session,让所有应用读写同一个存储位置的认证令牌:

// 路径:app/session-stores/application.js
import AdaptiveStore from 'ember-simple-auth/session-stores/adaptive';

export default class ApplicationSessionStore extends AdaptiveStore {
  cookieName = 'shared-app-session';
  localStorageKey = 'shared-app-session';
}

2. 确保应用自动恢复会话

ember-simple-auth的AdaptiveStore默认会在应用启动时自动尝试从存储中恢复会话,修改完键名后,用户打开/appC时,应用会自动读取共享的cookie或localStorage里的令牌,无需手动输入账号密码就能恢复登录状态。

如果你的应用路由有自定义beforeModel逻辑,可以额外加一行确保会话恢复:

// 在应用的根路由或应用路由中
beforeModel(transition) {
  return this.session.restore().then(() => {
    super.beforeModel(transition);
  });
}

3. 清理旧存储(可选)

如果之前用户已在各应用登录过,可能残留了appA、appB、appC的旧cookie和localStorage项,可在应用启动时清除这些旧数据避免干扰:

// 在ApplicationRoute的init或beforeModel中
init() {
  super.init(...arguments);
  // 清除旧的localStorage项
  ['appA', 'appB', 'appC'].forEach(key => localStorage.removeItem(key));
  // 清除旧的cookie
  ['appA', 'appB', 'appC'].forEach(key => document.cookie = `${key}=; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT`);
}

调整完成后,用户在任一应用登录,其他同域名下的应用都会自动读取共享的认证令牌,实现免登录跳转。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 03:25:56