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

Amplify Google登录时如何向预注册触发Lambda传递自定义属性

自定义属性传递方案

问题根因

你尝试通过customState传递参数但无法在preSignUp触发器中获取,是因为Cognito preSignUp触发器针对联邦身份(Google等第三方登录)的场景,设计上不会将OAuth授权流程中的state参数直接注入到事件参数中,仅用户名密码注册、自定义授权流场景支持直接在preSignUp中读取clientMetadata参数。

可行实现方案

方案1:调整触发器+透传customState

  • 前端调用代码保持兼容写法,注意customState仅支持字符串类型,复杂数据需要序列化:
    // 序列化自定义数据为字符串
    const customData = JSON.stringify({ userId: 'xxx', source: 'web', inviteCode: 'xxx' })
    Auth.federatedSignIn({ provider: 'Google', customState: customData })
    
  • 放弃使用preSignUp触发器,改用Post Authentication触发器或者Pre Token Generation触发器,这两个触发器的事件参数中可以读取到你传递的customState,路径为event.request.context["customState"],拿到参数后即可执行用户数据入库逻辑,逻辑和preSignUp完全一致,仅触发时机后置。

方案2:配合自定义用户属性传递

  • 先在Cognito用户池的「属性」配置中添加自定义属性,比如custom:invite_code、custom:source
  • 前端发起登录前先将自定义数据存入浏览器localStorage,用户完成Google登录回调到你的应用后,调用Auth.updateUserAttributes()方法将自定义数据写入Cognito用户属性,同时触发你的入库逻辑,该方案不需要修改Lambda触发器配置,适合数据安全性要求不高的场景。

方案3:缓存临时数据映射

  • 前端生成唯一的32位随机字符串作为stateKey,将自定义数据存入你的后端缓存(如Redis),过期时间设置为15分钟
  • 将stateKey作为customState传递给Auth.federatedSignIn
  • 触发preSignUp时,通过Lambda调用你的后端接口,传入用户的Google OpenID作为key查询对应的缓存自定义数据,完成入库后删除缓存即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 02:36:01