2016-10-24 27 views
6

Tôi đang sử dụng AWS Cognito cho nhóm người dùng và xác thực người dùng.Lỗi đăng nhập không xác thực của AWS Cognito (cửa sổ không được xác định) [JS]

đăng ký của tôi là làm việc nhưng chức năng đăng nhập của tôi là ném một lỗi:

/node_modules/aws-sdk/lib/request.js:31 ném err; ^

ReferenceError: cửa sổ không được định nghĩa

Dưới đây là các chức năng:

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

}); 
}); 

Tôi khá chắc chắn rằng lỗi xảy ra trong quá trình thực hiện các dòng sau khi tôi đặt các bản ghi gỡ lỗi trong suốt mã và nó chỉ được thực hiện cho đến đây:

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

Trả lời

10

AWS Cognito JS SDK có nghĩa là được sử dụng ở phía khách hàng. Nếu bạn muốn sử dụng nó ở phía máy chủ, bạn có thể giả lập đối tượng cửa sổ bằng cách sử dụng thư viện window-mock chẳng hạn.

npm install --save window-mock 

Sau đó, trên đầu trang của các tập tin và trước khi chức năng của bạn, thêm dòng sau:

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

Sau đó, bạn sẽ có được navigator not defined lỗi, mà bạn có thể giải quyết với:

global.navigator =() => null; 

Sau đó, bạn sẽ có thể in kết quả trên một trong các cuộc gọi lại.

4

Tôi quan sát vấn đề này xảy ra trong khi chạy trong NodeJS chỉ khi bạn bật "nhớ thiết bị của người dùng" trong nhóm người dùng. Nếu tôi vô hiệu hóa như vậy, lỗi sẽ không xảy ra. Nó có ý nghĩa bởi vì như Sajjad đã đề cập nó có nghĩa là để được sử dụng trên phía khách hàng và kể từ khi chạy từ phía máy chủ sẽ không có những thích hợp trình duyệt. Tôi đã nhận được tương tự như lỗi liên quan "ReferenceError: navigator không được định nghĩa"

0

Đặt Không trong tất cả các bộ phận quản lý thiết bị, nếu bạn đang chạy trong nodejs và bạn không muốn bất kỳ thiết bị để được ghi nhớ. CogintoUser API cố gắng lấy UserAgent từ Device và giả định navigator là Device.

Các vấn đề liên quan