能否在AWS Amplify的Velocity模板中获取用户邮箱
问题解答
首先明确结论:当前你无法直接从Velocity模板中获取到用户邮箱,需要先调整身份提供商的令牌配置后才可获取。
核心逻辑说明
Velocity模板中$ctx.identity对象下的所有属性(包括claims内的字段),都是直接解析自请求携带的JWT身份令牌的Payload内容,令牌中存在的声明字段才能在模板中读取,令牌中没有的字段无法凭空生成。
从你贴出的上下文结果可以看到,当前$ctx.identity.claims对象内不存在email相关字段,因此当前取不到邮箱值。
操作步骤
如果你使用的是Amazon Cognito作为身份提供商(从现有claim结构判断大概率是该场景):
- 进入Cognito用户池控制台,打开对应用户池的「App集成」标签页
- 找到你对接GraphQL API的App客户端,进入编辑页面
- 在「属性读写权限」配置块中,找到「ID令牌中的OpenID Connect范围」,勾选
email范围 - 向下找到「要在ID令牌中包含的属性」,勾选
email属性后保存配置 - 用户重新登录获取新的JWT令牌后,即可在Velocity模板中通过
$ctx.identity.claims.email读取用户邮箱
如果你使用的是自定义OIDC身份提供商:
在身份提供商侧配置,将email字段加入到返回给前端的JWT令牌Payload中即可,配置完成后同样通过$ctx.identity.claims.email读取。
内容的提问来源于stack exchange,提问作者Jens van Hellemondt
相关产品推荐
相关产品推荐

