Привет всем, поэтому у меня есть следующий маршрут ниже. Это прекрасно работает, однако я хочу иметь возможность проверить AWS Cognito, чтобы убедиться, что электронная почта пользователей еще не существует, прежде чем я вставлю их в базу данных RDS. Есть ли простой способ сделать это? В настоящее время я просто вставляю их и выдаю сообщение об ошибке, когда они пытаются войти на сайт, но я действительно ненавижу этот поток пользователей и пытаюсь сделать его лучше. Я использую nodejs и AWS SDK.
router.post("/signup", async (req, res, next) => {
try {
const { username, password, plan, isDisplayOwner, optIn } = req.body;
const bannerToken = null;
const userAttributes = [
{
Name: "given_name",
Value: req.body.firstName
},
{
Name: "family_name",
Value: req.body.lastName
},
{
Name: "email",
Value: req.body.email
},
{
Name: "phone_number",
Value: req.body.phone
},
{
Name: "custom:company",
Value: req.body.company
}
];
await cognito
.signUp({
ClientId: process.env.AWS_COGNITO_CLIENT_ID,
Username: username,
Password: password,
UserAttributes: userAttributes
})
.promise();
const dbPlanName = plan !== "FREE" ? "Braintree" : plan;
const [[{ insertId }]] = await database.query(
"CALL insertUser (?, ?, ?, ?)",
[username, dbPlanName, isDisplayOwner, bannerToken]
);
const paramsId = {
UserAttributes: [
{
Name: "custom:CE_user_id",
Value: insertId.toString()
}
],
UserPoolId: process.env.AWS_COGNITO_USER_POOL_ID,
Username: username
};
await cognito.adminUpdateUserAttributes(paramsId).promise();
if (dbPlanName === "Braintree") {
await database.query(
"INSERT INTO pending_subscriptions (user_id, plan) VALUES(?,?)",
[insertId, plan]
);
}
if (optIn) {
await database.query(
"INSERT INTO new_email_list_opt_ins (user_id) VALUES(?)",
insertId
);
}
res.send("Signup completed. Confirm account.");
} catch (error) {
error.status = 409;
next(error);
}
});