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

Amplify跨版本项目间用户认证状态同步问题求助

跨Amplify版本(v6→v5)实现用户身份识别与登出问题解决

问题背景

  • Project A基于Amplify 6,用户登录后通过Cookie存储认证信息,跳转至基于Amplify 5的Project B
  • Project B中调用Auth.signOut()和Auth.currentAuthenticatedUser()均无效果,currentAuthenticatedUser()返回无已认证用户
  • Project B单独注册/登录功能正常,仅无法识别Project A写入的Cookie认证信息

解决方案:Project B需补充的配置

1. 显式配置Cookie存储引擎

Amplify 5默认使用localStorage存储令牌,而Project A使用CookieStorage,因此Project B必须强制指定使用CookieStorage才能读取共享Cookie:

import Amplify from 'aws-amplify';
import { Auth } from 'aws-amplify';
import { CookieStorage } from '@aws-amplify/core';

const authConfig = {
  userPoolId: 'YOUR_USER_POOL_ID', // 与Project A完全一致
  userPoolClientId: 'YOUR_USER_POOL_CLIENT_ID', // 与Project A完全一致
  region: 'YOUR_AWS_REGION', // 必须明确指定,与Project A的Cognito区域一致
  storage: new CookieStorage({
    domain: '.your-root-domain.com', // 设置为根域名,确保跨项目共享Cookie(如a.yourdomain.com和b.yourdomain.com)
    path: '/',
    secure: true, // 生产环境建议开启,需配合HTTPS
    sameSite: 'Lax' // 跨域场景下改为'None',且需确保secure为true
  })
};

Amplify.configure({ Auth: authConfig });

2. 确保Auth配置完全匹配

Project B的Auth配置必须与Project A的Cognito参数完全一致,包括:

  • userPoolId
  • userPoolClientId
  • region(Amplify 5需显式声明,Amplify 6可能从配置文件自动读取)

参数不匹配会导致Cognito无法验证令牌有效性,进而无法识别用户。

3. 强制从Cookie读取认证信息

调用Auth.currentAuthenticatedUser()时添加bypassCache: true参数,跳过本地缓存,直接从Cookie读取最新令牌:

Auth.currentAuthenticatedUser({ bypassCache: true })
  .then(user => {
    // 成功识别用户,可执行后续逻辑
  })
  .catch(err => {
    // 无有效认证用户
  });

4. 检查Cognito用户池客户端设置

在AWS控制台的Cognito用户池→应用客户端中,确认:

  • 允许的回调URL、登出URL包含两个项目的域名
  • 允许的来源(如果启用OAuth)包含两个项目的域名
  • 应用客户端的令牌有效期配置与Project A一致

5. 处理跨项目登出同步

配置完成后,Project B调用Auth.signOut()会自动清除共享Cookie,Project A的认证状态也会同步失效(刷新页面后会退出登录)。

内容的提问来源于stack exchange,提问作者Maikon Camilo Gosh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 08:13:19