Как заставить AWS Cognito: signUp () выполняться синхронно (nodejs) - PullRequest
0 голосов
/ 06 мая 2019

Я пытаюсь настроить приложение узла, которое использует AWS Cognito SDK для регистрации / входа / подтверждения / аутентификации пользователя.

В настоящее время я не могу получить ответ от метода signUp (), поскольку кажется, что код работает асинхронно.

Я попытался определить асинхронную функцию register_user (...) и передать необходимые параметры в отдельную функцию register (...) для ожидания ответа signUp, прежде чем продолжить внутри register_user (...).

ЗАЯВЛЕНИЯ ОБ ИМПОРТЕ

const AmazonCognitoIdentity = require('amazon-cognito-identity-js');
const CognitoUserPool = AmazonCognitoIdentity.CognitoUserPool;
const AWS = require('aws-sdk');
const request = require('request');
const jwkToPem = require('jwk-to-pem');
const jwt = require('jsonwebtoken');
global.fetch = require('node-fetch');

РЕГИСТРАЦИОННАЯ ФУНКЦИЯ

function register(userPool, email, password, attribute_list){

    let response;

    userPool.signUp(email, password, attribute_list, null, function(err, result){
        console.log("inside")
        if (err){
            console.log(err.message);
            response = err.message;
            return response;
        } 
        cognitoUser = result.user;
    });

    return "User succesfully registered."

}

РЕГИСТРАЦИЯ ПОЛЬЗОВАТЕЛЯ

var register_user = async function(reg_payload){

    email = reg_payload['email']
    password = reg_payload['password']
    confirm_password = reg_payload['confirm_password']

    // define pool data
    var poolData = {
      UserPoolId : cognitoUserPoolId,
      ClientId : cognitoUserPoolClientId
    };

    var userPool = new AmazonCognitoIdentity.CognitoUserPool(poolData);

    var attribute_list = [];

    // define fields needed
    var dataEmail = {
        Name : 'email',
        Value : email
    };

    var attributeEmail = new AmazonCognitoIdentity.CognitoUserAttribute(dataEmail);

    attribute_list.push(attributeEmail);

    if (password === confirm_password){

        console.log("here")

        var result = await register(userPool, email, password, attribute_list);

        console.log(result)

        console.log("here2")

    } else {
        return "Passwords do not match."
    }
};

Я обнаружил, что даже когда я определил указанную функцию регистра для ожидания, поведение все еще асинхронно.

Есть ли способ заставить синхронно запускать метод signUp внутри функции register_user (...)? Большое спасибо.

1 Ответ

1 голос
/ 06 мая 2019

Вам потребуется изменить функцию register, чтобы она возвращала Обещание, если вы хотите await в функции register_user

function register(userPool, email, password, attribute_list) {
  return new Promise((resolve, reject) => {
    userPool.signUp(email, password, attribute_list, null, (err, result) => {
      console.log('inside');
      if (err) {
        console.log(err.message);
        reject(err);
      }
      cognitoUser = result.user;
      resolve(cognitoUser)
    });
  });
}
...