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('/');
    }
};

0 ответов

Другие вопросы по тегам