我需要一些keystonejs会话的帮助。我正在处理一个购物车,因此在客户将产品添加到购物车后,他们会进入一个强制他们以用户身份登录的结帐页面。但是,当他们登录时,会话将重新启动并清除购物车中的内容。
我的问题是:有没有办法登录并保留现有会话,然后将用户id添加到会话中。
我使用connect-mongo将会话持久化到mongodb。
我已经编写了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);//对用户进行授权。
问候
发布于 2017-01-01 12:38:57
据我所知,用户使用Keystone only appends the user property登录到request对象,并将用户的MongoDB id添加到req.session.userId。它不会清除现有的会话。您目前是如何添加到Keystone会话的?
发布于 2018-11-18 19:59:09
我想知道这个问题有什么更新吗?
我稍微深入研究了一下,发现在keystone.session中的req.session.reganete()清理上一次会话,keystone中的代码看起来都很好。
我最终将匿名用户购物车作为对象放入其中,并在keystone.signin成功回调时将该对象重新分配回req.session.cart
在帖子之后更新
当发出新的会话ID时,会话库将清除该会话。
请参阅此处的讨论:Request: Option for refreshing the session ID
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.
// ...发布于 2021-09-08 21:13:14
我不认为你可以在会话中设置它。它只适用于用户。
相反,我会在购物车列表上有一个isDraft字段,并保存每次产品更改的购物车。
https://stackoverflow.com/questions/41403867
复制相似问题