Amplify仅在Safari环境下跳转站点时报“No current user”错误如何解决?
根因定位
- Safari的智能跟踪预防(ITP)策略会限制非用户主动交互触发的页面导航的存储访问权限,通过JS自动调用
window.location.assign/replace这类方法触发的跳转,会被ITP判定为非可信行为,导致跳转后站点无法读取原有存储的身份凭证 - Amplify默认的身份初始化逻辑中,如果首次读取凭证失败,会主动清除本地已有的存储内容,进一步导致凭证丢失,触发重定向到登录页
- 手动输入URL跳转属于用户主动触发的导航行为,不会被ITP限制,因此可以正常读取凭证
修复方案
- 优先使用
<a>标签跳转替代JS跳转,将跳转目标写入href属性,天然符合Safari对用户主动交互的判定规则,无额外兼容问题 - 必须使用JS跳转的场景,要保证跳转逻辑在用户主动触发的事件回调(如按钮点击、链接点击事件)中执行,不要在异步请求回调、定时器、页面初始化逻辑等非用户直接触发的上下文中调用跳转方法
- 调整Amplify Auth配置,补充
sameSite属性,明确强制使用Cookie存储避免localStorage被限制,修改后的配置如下:
import { CookieStorage } from 'amazon-cognito-identity-js'; // 需引入对应的依赖 auth: { region: "eu-west-2", userPoolId: "eu-west-2_XXXXXXXX", userPoolWebClientId: "XXXXXXXXXXXXXXXXXXXXXX", storage: new CookieStorage({ domain: "XXX.XXXXX.com", path: "/", expires: 365, secure: true, sameSite: "Lax" }), cookieStorage: { domain: "XXX.XXXXX.com", path: "/", expires: 365, secure: true, sameSite: "Lax" } }
- 跳转前主动调用一次
Amplify.Auth.currentSession()确认凭证有效,避免Amplify在新页面初始化时误判凭证不存在主动清除存储内容
内容的提问来源于stack exchange,提问作者Techie
相关产品推荐
相关产品推荐

