React Native+Expo+AWS Amplify应用突发401 GraphQLError求助
解决React Native + Expo + AWS Amplify GraphQL 401认证错误
检查Cognito会话令牌有效性
3周后出现401大概率是令牌过期且未自动刷新,执行以下代码确认令牌状态:import { Auth } from '@aws-amplify/auth'; const checkSession = async () => { try { const session = await Auth.currentSession(); console.log('令牌过期时间:', session.getIdToken().getExpiration()); // 强制刷新会话 await Auth.currentAuthenticatedUser({ bypassCache: true }); } catch (err) { console.log('会话无效:', err); } };如果会话无效,直接引导用户重新登录。
确认GraphQL API授权配置
登录AWS Amplify控制台,检查:- 目标GraphQL API的授权模式是否已启用
AMAZON_COGNITO_USER_POOLS - API资源策略是否未被修改,确保允许当前Cognito用户池的用户访问
listUsers查询
- 目标GraphQL API的授权模式是否已启用
修正authMode的正确使用方式
确保authMode参数传递到正确的位置:import { API, graphqlOperation } from '@aws-amplify/api'; import { listUsers } from './graphql/queries'; // 单个查询指定authMode const fetchUsers = async () => { try { const result = await API.graphql({ query: graphqlOperation(listUsers), authMode: 'AMAZON_COGNITO_USER_POOLS' }); console.log('用户列表:', result.data.listUsers.items); } catch (err) { console.log('查询错误:', err); } }; // 全局配置默认authMode Amplify.configure({ ...awsExports, API: { graphql_headers: async () => { const session = await Auth.currentSession(); return { Authorization: session.getIdToken().getJwtToken() }; } } });排查依赖版本兼容性
检查@aws-amplify/*依赖与当前Expo SDK版本是否兼容,执行更新命令:npm install @aws-amplify/core@latest @aws-amplify/auth@latest @aws-amplify/api@latest清除客户端缓存
Expo客户端可能缓存了过期的认证信息:- 在Expo客户端中清除应用缓存
- 或通过代码强制登出并清除全局缓存:
await Auth.signOut({ global: true });
内容的提问来源于stack exchange,提问作者Kester Belgrove
相关产品推荐
相关产品推荐

