Cognito остается в системе как один пользователь, даже если он находится в режиме инкогнито - PullRequest
0 голосов
/ 04 января 2019

Я в основном следовал этой средней статье, чтобы настроить 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('/')
        }
    });
})

Я ожидаю, что один сеанс браузера будет восприниматься как один пользователь, как обычная регистрация. Спасибо за любую помощь.

...