Flutter接入Amplify Cognito登录成功后fetchAuthSession无法获取令牌
问题原因
- 核心配置错误:你提供的
amplifyconfig中,CredentialsProvider下的Cognito身份池(Identity Pool)ID填写错误。
身份池ID的标准格式为[区域]:[UUID字符串](例如us-east-1:12345678-1234-1234-1234-1234567890ab),但你当前填的是用户池(User Pool)ID(格式为[区域]_[随机字符串]),错误的配置导致令牌获取流程异常。 - 本地会话缓存失效:
fetchAuthSession默认优先读取本地缓存的会话数据,如果缓存损坏、过期未被正常清理,也会返回空的用户池令牌。 - 不必要的身份池逻辑干扰:如果你仅使用Cognito用户池做账号认证,不需要调用AWS其他服务的临时凭证,保留
CredentialsProvider配置块会让Amplify额外走身份池校验逻辑,反而影响令牌获取。
解决方案
- 修正配置文件
- 如果你确实需要用到Cognito身份池获取AWS临时凭证:登录AWS控制台找到对应身份池的正确ID,替换
CredentialsProvider.CognitoIdentity.Default.PoolId的取值即可,也可以直接复用React项目中正常运行的身份池配置值。 - 如果你仅使用用户池做登录认证:直接删除
amplifyconfig中整个CredentialsProvider配置块即可,不需要额外配置身份池。
- 如果你确实需要用到Cognito身份池获取AWS临时凭证:登录AWS控制台找到对应身份池的正确ID,替换
- 调用接口时添加强制刷新参数,避免读取无效缓存,修改后的代码如下:
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; }
- 配置修改后,先调用
Amplify.Auth.signOut()清理本地所有缓存的会话数据,再重新登录测试即可。
内容的提问来源于stack exchange,提问作者hugo
相关产品推荐
相关产品推荐

