Проверьте AWS Cognito, чтобы убедиться, что электронная почта не существует - PullRequest
2 голосов
/ 30 сентября 2019

Привет всем, поэтому у меня есть следующий маршрут ниже. Это прекрасно работает, однако я хочу иметь возможность проверить 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);
  }
});

1 Ответ

2 голосов
/ 30 сентября 2019

Привет Все, вот мое решение для поиска, чтобы увидеть, существует ли пользователь в Cognito. Вы просто используете функцию listUsers из AWS SDK. Обратите внимание, что он не возвращает логическое значение, но вы можете просто сделать emailExists.Users.length, и если длина больше 0, электронная почта уже существует.

    const emailParams = 
    { 
        AttributesToGet: [], 
        Filter: 'email = "' + req.body.email + '"', 
        UserPoolId: process.env.AWS_COGNITO_USER_POOL_ID 
    }; 
    const emailExists = await cognito.listUsers(emailParams).promise()
    if(emailExists.Users.length>0){
        //user exists
        throw "user exists"
    } else {
        // user does not exist
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...