Amplify V6下AWS AppSync无法读取Cognito自定义属性求助
Amplify v6下AppSync解析器获取Cognito自定义属性的解决方案
检查Cognito用户池属性配置
- 先确认
custom:mydata已设置为可在Token中返回:- 打开AWS控制台的Cognito用户池,找到对应应用客户端
- 进入客户端设置页面,在「ID Token」或「Access Token」的属性列表里勾选
custom:mydata(根据你实际使用的Token类型选择) - 如果使用Access Token,需额外检查用户池的属性映射配置,确保
custom:mydata被添加到Access Token的输出字段中——默认情况下Access Token不会自动包含所有自定义属性
验证前端Token是否包含目标属性
Amplify v6的会话获取逻辑有变化,先在前端确认拿到的Token里是否存在custom:mydata:
import { fetchAuthSession } from 'aws-amplify/auth'; const session = await fetchAuthSession(); // 解析ID Token的Payload const idTokenPayload = JSON.parse(atob(session.idToken?.payload.split('.')[1] || '')); console.log(idTokenPayload['custom:mydata']); // 如果使用Access Token则解析对应Payload const accessTokenPayload = JSON.parse(atob(session.accessToken?.payload.split('.')[1] || '')); console.log(accessTokenPayload['custom:mydata']);
如果前端这里拿不到属性值,说明Token本身未携带该字段,优先调整Cognito配置。
调整AppSync解析器与配置
- 确认AppSync使用的Token类型:若用ID Token,自定义属性应直接出现在
context.identity.claims中;若用Access Token,必须确保Cognito已将属性注入Access Token - 检查AppSync身份验证配置:在AppSync控制台的API设置中,确认Cognito用户池作为身份提供者时,属性映射规则正确,未遗漏
custom:mydata - 解析器中可直接用
context.identity.claims['custom:mydata']访问属性,替换原v5的get()写法尝试
强制刷新会话缓存
旧Token的缓存可能导致新配置不生效,前端强制刷新一次会话:
await fetchAuthSession({ forceRefresh: true });
之后重新发起AppSync请求,查看解析器中的context.identity是否已包含custom:mydata
内容的提问来源于stack exchange,提问作者alditis
相关产品推荐
相关产品推荐

