我正在设置一个端点,以将自定义属性保存在数据库中的用户而非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以来,我就没有领头羊。
答案 0 :(得分:0)
您也许可以使用Cognito确认后触发器(https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-lambda-post-confirmation.html)来执行此操作。一旦用户确认了电子邮件,这将使您可以将所有用户信息保存到数据库中。
另一种方法是将所有信息保存在isEmailConfirmed
之类的字段中,一旦该人验证了电子邮件,就可以将其更改为true
。