Keystonejs сеанс

Мне нужна помощь с сеансами keystonejs. Я работаю над корзиной для покупок, поэтому после того, как покупатель добавляет продукт в корзину, он переходит на страницу оформления заказа, которая заставляет его войти в систему как пользователь. Однако, когда они входят в систему, сеанс перезапускается и очищается содержимое корзины.

Мой вопрос: есть ли способ войти в систему и сохранить существующий сеанс, а затем добавить идентификатор пользователя в сеанс.

Я сохраняю сеанс на mongodb с помощью connect-mongo.

Я написал req.session.cart, чтобы добавить продукты в сеанс и использовать

view.on('post', { action: 'login' }, function (next) {

    if (!req.body.email || !req.body.password) {
        req.flash('error', { detail: 'Please enter your email and password.' });
        return next();
    }

    var onSuccess = function() {
        req.flash('success', { detail: 'Great you are now logged in!' });
        res.redirect('/checkout');//redirect on success
    }

    var onFail = function() {
        req.flash('error', { detail: 'Input credentials were incorrect, please try again.' });
        return next();
    }

    keystone.session.signin({ email: req.body.email, password: req.body.password }, req, res, onSuccess, onFail);//

для авторизации пользователя.

С Уважением


person Mendo    schedule 30.12.2016    source источник


Ответы (2)


Насколько я могу судить, вход пользователя с помощью Keystone добавляет только свойство user к объекту запроса и добавляет идентификатор пользователя MongoDB в req.session.userId. Это не очищает существующий сеанс. Как вы сейчас добавляетесь к сеансу Keystone?

person Shea Hunter Belsky    schedule 01.01.2017
comment
Я сохраняю сеанс на mongodb с помощью connect-mongo и использую keystone.session.signin для подписи пользователя. Я заметил, что когда пользователь подписывается в текущем сеансе, он удаляется и заменяется новым сеансом с идентификатором пользователя, как вы указали выше. - person Mendo; 02.01.2017

Мне интересно, есть ли обновление по этому вопросу?

Я покопался немного глубже и обнаружил, что в req.session.reganete() в keystone.session очистите предыдущий сеанс, и код в keystone выглядит хорошо.

В итоге я поместил анонимного пользователя в Cart как объект и при keystone.signin успешном обратном вызове переназначил объект обратно на req.session.cart


[Обновление после публикации]

Библиотека сеанса очистит сеанс при появлении нового идентификатора сеанса.

См. Обсуждение здесь: Запрос: возможность обновления идентификатора сеанса

const currentSession = {}
// 1. have a copy of current session
Object.assign(currentSession, req.session) 
// 2. merge the copied session to new session after keystone signin method.
// ...
person Max Ma    schedule 18.11.2018