Ошибка входа в AWS Cognito без проверки подлинности (окно не определено) [JS]

#javascript #amazon-web-services

#javascript #amazon-веб-сервисы

Вопрос:

Я использую AWS Cognito для создания пользовательских пулов и аутентификации.

Моя регистрация работает, но моя функция входа выдает ошибку:

/node_modules/aws-sdk/lib/request.js:31 выдает ошибку; ^

Ошибка ссылки: окно не определено

Вот функция:

 app.post('/login', function(req, res, next) {

console.log("Email: "   req.body.email);
console.log("Password: "   req.body.password);

var authenticationData = {
  Username: req.body.username,
  Password: req.body.password
};

var authenticationDetails = new AWS.CognitoIdentityServiceProvider
  .AuthenticationDetails(authenticationData);

var poolData = {
  UserPoolId: '*removed for security*',
  ClientId: '*removed for security*'
};

var userPool = new AWS.CognitoIdentityServiceProvider.CognitoUserPool(
poolData);
var userData = {
Username: req.body.username,
Pool: userPool
};

var cognitoUser = new AWS.CognitoIdentityServiceProvider.CognitoUser(
userData);

cognitoUser.authenticateUser(authenticationDetails, {
  onSuccess: function(result) {
    console.log('access token   '     result.getAccessToken().getJwtToken());

  AWS.config.credentials = new AWS.CognitoIdentityCredentials({
    IdentityPoolId: '*removed for security*',
    Logins: {
      '*removed for security*': result
        .getIdToken().getJwtToken()
    }
  });

},
onSuccess: function(suc) {
  console.log('Login Successful!');
},
onFailure: function(err) {
        console.log('Login Unsuccessful');
  alert(err);
},

});
});
  

Я почти уверен, что ошибка возникает во время выполнения следующей строки, поскольку я разместил журналы отладки по всему коду, и она выполнялась только до этого момента:

 var cognitoUser = new AWS.CognitoIdentityServiceProvider.CognitoUser(userData);
  

Ответ №1:

AWS Cognito JS SDK предназначен для использования на стороне клиента. Если вы хотите использовать его на стороне сервера, вы можете создать макет объекта window, используя window-mock библиотеку, например.

 npm install --save window-mock
  

Затем поверх файла и перед вашей функцией добавьте следующее:

 import WindowMock from 'window-mock';
global.window = {localStorage: new WindowMock().localStorage};
  

После этого вы получите navigator not defined ошибку, которую вы можете решить с помощью:

 global.navigator = () => null;
  

Тогда вы должны иметь возможность распечатать результат при любом из обратных вызовов.

Комментарии:

1. В настоящее время в версиях, актуальных на 2021 год, «Amazon Cognito Identity SDK для JavaScript» можно использовать как в браузере, так и в серверных NodeJS

Ответ №2:

Я заметил, что эта проблема возникает при запуске в NodeJS только тогда, когда вы включаете «запоминать устройства вашего пользователя» в пуле пользователей. Если я отключу то же самое, ошибка не возникнет. Это имеет смысл, потому что, как упоминал Сэм, он предназначен для использования на стороне клиента, и поскольку запуск со стороны сервера не будет иметь этих свойств браузера. Я получал аналогичную ошибку «Ошибка ссылки: навигатор не определен».

Ответ №3:

Установите Нет во всех разделах управления устройствами, если вы работаете в nodejs и не хотите, чтобы какое-либо устройство запоминалось. API CogintoUser пытается получить UserAgent с устройства и принимает navigator в качестве устройства.