Node.js и AWS Cognito: это правильная настройка?
Я только начинаю с Cognito + Node.JS и хочу сделать все как можно более правильно. Большинство учебных пособий, которые я нашел в отношении Javascript + Cognito, предназначались для обработки учетных записей на стороне клиента. Я хочу, чтобы обработка аккаунта была как можно больше в бэк-энде.
Есть ли проблемы с этой настройкой?
Registration.js - Обработка запросов POST / регистрация (отправлено из формы регистрации HTML)
module.exports = (req, res) => {
if(req.body.password !== req.body.confirm_password) {
if(!req.session.errors) {
req.session.errors = [];
}
req.session.errors.push('Passwords do not match.');
return res.redirect('/signup');
}
const attributeList = [];
attributeList.push(new CognitoUserAttribute({
Name : 'email',
Value : req.body.email
}));
attributeList.push(new CognitoUserAttribute({
Name : 'custom:plan',
Value : '1'
}));
userPool.signUp(req.body.email, req.body.password, attributeList, null, (err, result) => {
if(err) {
if(!req.session.errors) {
req.session.errors = [];
}
req.session.errors.push(err.message);
res.redirect('/');
return console.error(err);
}
req.session.errors = [];
res.redirect('/');
});
};
Login.js - обработка запросов POST /login (отправлено из формы входа в HTML)
module.exports = (req, res) => {
const authenticationData = {
Username: req.body.email,
Password: req.body.password
};
const authenticationDetails = new aci.AuthenticationDetails(authenticationData);
const cognitoUser = new aci.CognitoUser({
Username: req.body.email,
Pool: userPool
});
cognitoUser.authenticateUser(authenticationDetails, {
onSuccess: session => {
req.session.tokens = {
accessToken: session.getAccessToken().getJwtToken(),
idToken: session.getIdToken().getJwtToken(),
refreshToken: session.getRefreshToken().getToken()
};
req.session.sub = cognitoUser.username;
req.session.errors = [];
res.redirect('/dashboard');
},
onFailure: err => {
console.error(err);
if(!req.session.errors) {
req.session.errors = [];
}
req.session.errors.push(err.message);
res.redirect('/login');
}
});
};
Logout.js - обработка запросов GET /logout
const CognitoUserPool = aci.CognitoUserPool;
const CognitoAccessToken = aci.CognitoAccessToken;
const CognitoIdToken = aci.CognitoIdToken;
const CognitoRefreshToken = aci.CognitoRefreshToken;
const CognitoUserSession = aci.CognitoUserSession;
const CognitoUser = aci.CognitoUser;
module.exports = (req, res) => {
if(req.session.sub && req.session.tokens) {
const sub = req.session.sub;
const tokens = req.session.tokens;
const AccessToken = new CognitoAccessToken({ AccessToken: tokens.accessToken });
const IdToken = new CognitoIdToken({ IdToken: tokens.idToken });
const RefreshToken = new CognitoRefreshToken({ RefreshToken: tokens.refreshToken });
const cognitoUser = new CognitoUser({
Username: sub,
Pool: userPool
});
cognitoUser.setSignInUserSession(new CognitoUserSession({
IdToken: IdToken,
AccessToken: AccessToken,
RefreshToken: RefreshToken
}));
cognitoUser.getSession((err, session) => {
delete req.session.sub;
delete req.session.tokens;
if(err) {
console.error(err);
}
if(session.isValid()) {
cognitoUser.signOut();
}
res.redirect('/');
});
} else {
res.redirect('/');
}
};