将自定义属性保存在用户数据库而不是userpool中

时间:2019-05-23 07:22:16

标签: node.js aws-lambda aws-serverless

我正在设置一个端点,以将自定义属性保存在数据库中的用户而非Cognito池中。我这样做的原因是,congnito池限制了属性的修改,并且非常仅限于25个属性。 问题是,我有一个邀请链接,该链接来自注册用户的referralId。单击该链接后,它会显示注册页面,要求未注册用户进行注册。当他签约并且Auth.signup的诺言得到解决后,他将重定向到“谢谢”页面,要求他在登录前确认电子邮件地址。这时,我实际上可以从中提取referralId查询参数(http://localhost:3000/invite?referralId={id})

在这个阶段,我对如何定义我的无服务器端点感到困惑,因为signInSession尚未定义,因为用户尚未确认!如果用户进入他的电子邮件并验证电子邮件,则目前无法提取referralId,因为它是在Cognito池的MessageCustomizations中设置的。

我尝试了以下代码来设置无服务器端点

由于我在前端使用reactjs,因此这就是我post请求referrerId的方式。

import HttpClient from './httpClient';

class UserCustomAttributesController extends HttpClient {
  saveReferrerId = async (referrerId) => {
    const response = await this.client.post(`/invite?referredId=${referrerId}`);
    return response.data;
  };
}

export default new UserCustomAttributesController();

不过在后端,

    handler: lib/functions/updateUser/index.handler
    events: 
      - http: 
          path: /invite
          method: put
          request: 
            template: 
              application/json: '{ "referrerId" : "$input.params(''referrerId'')" }' 
          cors: 
            origin: "*"
            headers: 
              - Content-Type
              - X-Amz-Date
              - Authorization
              - X-Api-Key
              # - X-Amz-Security-Token
              - X-Amz-User-Agent
            allowCredentials: true
          authorizer: 
            type: COGNITO_USER_POOLS
            authorizerId:
              Ref: ApiGatewayAuthorizer

我想将ReferrerId保存到数据库中的用户。自从我刚开始学习无服务器和AWS以来,我就没有领头羊。

1 个答案:

答案 0 :(得分:0)

您也许可以使用Cognito确认后触发器(https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-lambda-post-confirmation.html)来执行此操作。一旦用户确认了电子邮件,这将使您可以将所有用户信息保存到数据库中。

另一种方法是将所有信息保存在isEmailConfirmed之类的字段中,一旦该人验证了电子邮件,就可以将其更改为true