2016-10-24 4 views
6

Ich verwende AWS Cognito, um Benutzerpools und Authentifizierung zu verwenden.AWS Cognito nicht authentifizierter Anmeldefehler (Fenster ist nicht definiert) [JS]

Meine Anmeldung funktioniert, aber meine Login-Funktion wirft einen Fehler:

/node_modules/aws-sdk/lib/request.js:31 Wurf err; ^

Reference: Fenster nicht

definiert sind

Hier ist die Funktion:

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); 
}, 

}); 
}); 

Ich bin mir ziemlich sicher, dass der Fehler bei der Ausführung der folgenden Zeile auftreten wird, wie ich Debug-Protokolle im gesamten platziert Code und es wurde nur bis hier ausgeführt:

Antwort

10

AWS Cognito JS SDK soll auf der Client-Seite verwendet werden. Wenn Sie es serverseitig verwenden möchten, können Sie das Fensterobjekt zum Beispiel mit der Bibliothek window-mock überspie- len.

npm install --save window-mock 

Dann, am Anfang der Datei und vor Ihrer Funktion, fügen Sie die folgenden Schritte aus:

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

Danach, du wirst navigator not defined Fehlermeldung erhalten, die Sie mit lösen:

global.navigator =() => null; 

Dann sollten Sie in der Lage sein, das Ergebnis auf einem der Rückrufe zu drucken.

4

Ich beobachtete, dieses Problem bei der Ausführung in NodeJS nur auftreten, wenn Sie im Benutzerpool "Remember the User-Geräte" aktivieren. Wenn ich das gleiche deaktiviere, tritt der Fehler nicht auf. Es macht Sinn, denn wie Sajjad erwähnt hat, ist es gedacht, um auf der Client-Seite verwendet zu werden und da das Ausführen von der Server-Seite nicht diese Browser-Eigenschaften hat. Ich war immer ähnlich verwandten Fehler „Reference: Navigator ist nicht definiert“

0

Set Nr in allen Geräteverwaltungsabschnitte, wenn Sie in NodeJS laufen und Sie wollen nicht irgendein Gerät in Erinnerung bleiben. CogintoUser API versucht, UserAgent von dem Gerät abzurufen und übernimmt Navigator als das Gerät.

Verwandte Themen