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

Flutter接入Amplify Cognito登录成功后fetchAuthSession无法获取令牌

问题原因
  1. 核心配置错误:你提供的amplifyconfig中,CredentialsProvider下的Cognito身份池(Identity Pool)ID填写错误。
    身份池ID的标准格式为[区域]:[UUID字符串](例如us-east-1:12345678-1234-1234-1234-1234567890ab),但你当前填的是用户池(User Pool)ID(格式为[区域]_[随机字符串]),错误的配置导致令牌获取流程异常。
  2. 本地会话缓存失效:fetchAuthSession默认优先读取本地缓存的会话数据,如果缓存损坏、过期未被正常清理,也会返回空的用户池令牌。
  3. 不必要的身份池逻辑干扰:如果你仅使用Cognito用户池做账号认证,不需要调用AWS其他服务的临时凭证,保留CredentialsProvider配置块会让Amplify额外走身份池校验逻辑,反而影响令牌获取。
解决方案
  1. 修正配置文件
    • 如果你确实需要用到Cognito身份池获取AWS临时凭证:登录AWS控制台找到对应身份池的正确ID,替换CredentialsProvider.CognitoIdentity.Default.PoolId的取值即可,也可以直接复用React项目中正常运行的身份池配置值。
    • 如果你仅使用用户池做登录认证:直接删除amplifyconfig中整个CredentialsProvider配置块即可,不需要额外配置身份池。
  2. 调用接口时添加强制刷新参数,避免读取无效缓存,修改后的代码如下:
Future _getIdToken() async {
  final CognitoAuthSession session = await Amplify.Auth.fetchAuthSession(
    options: FetchAuthSessionOptions(forceRefresh: true),
  ) as CognitoAuthSession;
  final idToken = session.userPoolTokens?.idToken;
  print('idToken: $idToken');
  return idToken;
}
  1. 配置修改后,先调用Amplify.Auth.signOut()清理本地所有缓存的会话数据,再重新登录测试即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 19:45:03