Я в основном следовал этой средней статье, чтобы настроить Cognito в Node.JS. Я использовал экспресс для пользовательского интерфейса: https://medium.com/@prasadjay/amazon-cognito-user-pools-in-nodejs-as-fast-as-possible-22d586c5c8ec
Однако только один пользователь может войти в систему для всего приложения. И этот пользователь становится зарегистрированным на каждом браузере и IP-адресе. Таким образом, код не рассматривает всех как отдельного пользователя.
Я попытался поместить userPool в каждую функцию, как показано ниже, так как раньше она была константой в верхней части файла JS. Однако это ничего не сделало.
Вот основные функции:
app.get('/', (req, res) => {
let userPool = new AmazonCognitoIdentity.CognitoUserPool(poolData);
let cognitoUser = userPool.getCurrentUser();
if(cognitoUser === null) {
res.render('index')
}
else {
res.redirect('/dashboard')
}
});
app.get('/dashboard', (req, res) => {
let userPool = new AmazonCognitoIdentity.CognitoUserPool(poolData);
let cognitoUser = userPool.getCurrentUser();
if (cognitoUser != null) {
cognitoUser.getSession(function (err, session) {
if (err) {
req.flash('error_msg', err.message)
res.redirect('/');
}
if (session.isValid()) {
cognitoUser.getUserAttributes(function (err, result) {
if (err) {
req.flash('error_msg', err.message)
res.redirect('/');
}
let token = session['idToken']['jwtToken'];
ValidateToken(token);
res.render('dashboard', {name: result[2].getValue(), email: result[3].getValue()})
});
}
});
}
else {
req.flash('error_msg', 'You are not logged in...')
res.redirect('/');
}
})
app.post('/login', (req, res) => {
let userPool = new AmazonCognitoIdentity.CognitoUserPool(poolData);
let username = req.body.email;
let password = req.body.password;
let authenticationDetails = new AmazonCognitoIdentity.AuthenticationDetails({
Username : username,
Password : password,
});
let userData = {
Username : username,
Pool : userPool
};
let cognitoUser = new AmazonCognitoIdentity.CognitoUser(userData);
cognitoUser.authenticateUser(authenticationDetails, {
onSuccess: function (result) {
// console.log('access token + ' + result.getAccessToken().getJwtToken());
// console.log('id token + ' + result.getIdToken().getJwtToken());
// console.log('refresh token + ' + result.getRefreshToken().getToken());
req.flash('success_msg', 'Logged in');
res.redirect('/dashboard');
},
onFailure: function(err) {
req.flash('success_msg', err.message);
res.redirect('/dashboard');
console.log(err);
},
});
})
app.get('/register', (req, res) => {
let userPool = new AmazonCognitoIdentity.CognitoUserPool(poolData);
let cognitoUser = userPool.getCurrentUser();
if(cognitoUser === null) {
res.render('register')
}
else {
res.redirect('/dashboard')
}
})
app.post('/register', (req, res) => {
let userPool = new AmazonCognitoIdentity.CognitoUserPool(poolData);
let username = req.body.email;
let password = req.body.password;
let personalname = req.body.name;
let attributeList = [];
let dataEmail = {
Name : 'email',
Value : username, //get from form field
};
let dataPersonalName = {
Name : 'name',
Value : personalname, //get from form field
};
let attributeEmail = new AmazonCognitoIdentity.CognitoUserAttribute(dataEmail);
let attributePersonalName = new AmazonCognitoIdentity.CognitoUserAttribute(dataPersonalName);
attributeList.push(attributeEmail);
attributeList.push(attributePersonalName);
userPool.signUp(username, password, attributeList, null, function(err, result){
if (err) {
req.flash('error_msg', err.message);
res.redirect('/register');
return;
}
res.render('verify', {user: result.user.getUsername()})
});
})
app.post('/activation-code', (req, res) => {
let userPool = new AmazonCognitoIdentity.CognitoUserPool(poolData);
let email = req.body.username;
let activation_code = req.body.activation_code;
let userData = {
Username: email,
Pool: userPool
};
let cognitoUser = new AmazonCognitoIdentity.CognitoUser(userData);
// signing up
cognitoUser.confirmRegistration(activation_code, false, (error, result) => {
if (error) {
console.log(error)
req.flash('error_msg', error.message)
res.render('verify', {user: email})
}
else {
req.flash('success_msg', 'You have successfully verified your email. You can now log in.')
res.redirect('/')
}
});
})
Я ожидаю, что один сеанс браузера будет восприниматься как один пользователь, как обычная регистрация. Спасибо за любую помощь.