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

AWS Amplify Authentication踢除其他登录会话及token过期处理咨询

AWS Amplify 单会话登录(踢除其他活跃会话)实现方案

核心逻辑说明

GlobalSignOut接口的作用是让当前用户所有已发放的访问令牌、ID令牌、刷新令牌全部失效,如果在登录完成后直接调用,确实会导致当前刚生成的有效token也被作废,不可直接这么使用。

优化实现流程(解决现有逻辑卡顿问题)

你目前先调用GlobalSignOut再重新登录的逻辑是可行的,调整执行顺序即可消除卡顿:

  • 如果你是后端代理登录流程:用户账号密码/授权验证通过后,先调用GlobalSignOut失效所有历史会话的token,再为当前登录请求生成新的token集返回给前端。整个流程在后端一次完成,前端无需感知重复登录操作,不会出现卡顿。
  • 如果你是纯前端直接调用Amplify登录接口,无需后端改造,按下面顺序执行即可:
    1. 调用Auth.signIn完成登录,将当前新会话的refreshToken暂存到本地临时变量
    2. 调用Auth.globalSignOut()失效所有旧会话(包括刚生成的这一套新token)
    3. 用之前暂存的refreshToken调用Auth.refreshSession(),生成一套不受刚才登出操作影响的全新token集,替换本地存储的认证信息

其他端token过期自动退出方案

旧会话的访问令牌默认有效期最长1小时,在此期间即使刷新令牌失效,访问令牌依然可正常使用,你可以通过以下两种方式实现自动捕获失效、触发退出:

1. 全局捕获认证错误

方式1:API请求拦截器捕获401错误(以Axios为例)

axios.interceptors.response.use(
  (response) => response,
  async (error) => {
    if (error.response?.status === 401) {
      // 清空本地用户信息、token,跳转登录页
      await Auth.signOut({ global: false });
      window.location.href = '/login';
    }
    return Promise.reject(error);
  }
);

方式2:监听Amplify Hub的认证事件

import { Hub } from 'aws-amplify';

Hub.listen('auth', async (data) => {
  if (data.payload.event === 'tokenRefresh_failure') {
    // 捕获到刷新token失败,说明用户已被踢下线
    await Auth.signOut({ global: false });
    window.location.href = '/login';
  }
});

2. 可选优化:缩短访问令牌有效期

你可以在AWS Cognito用户池配置中,将访问令牌的有效期从默认1小时调整为最短5分钟,进一步缩小旧会话的可用窗口期,接近实时踢下线效果。

内容的提问来源于stack exchange,提问作者S.Mac

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 03:15:03