护照更新会话不持久
Passport update session isn't persisting
我正在尝试使用新名称更新我的用户会话,我认为这是一项简单的任务。
我是登录用户,正在访问 'update' 路由,我定义了自己的中间件来更新会话:
module.exports = function(req, res, next) {
console.log(req.user);
req.login(req.body.user, function(err) {
if (err) return next(new Error('Error updating user profile'));
console.log('USER UPDATED *******', req.user);
next();
});
};
挖掘上面的代码花了一些时间,它应该只是更新 Passport 会话对象。它正确地记录了前一个会话,然后是更新后的会话,但是当我在初始响应后导航到新页面时,用户对象完全丢失,只有 returns {}。
有什么想法吗?
source
要登录用户并将其保存到会话中,passport 使用通常将 user.id
存储为 cookie 的 serialize
函数和检索该 cookie 并执行操作的 deserialize
函数User.findById
数据库调用以查找关联的用户,如果找到一个,那就是存储在 req.user
中的用户对象。
req.login
将您传递给它的任何内容作为第一个参数直接传递给 passport.serialize
,否则它通常来自一个策略,该策略本身会从数据库中检索用户对象调用,或创建一个。
因此,当您使用 req.login
时,您需要将 passport.serialize
实际收到的用户对象传递给它,以便它可以将 id
存储在 cookie 中。
在你的情况下,你正在做 req.login(req.body.user, ...
,因为 req.body.user
来自 POST 表单变量,它不能有 id
那 passport.serialize
会存储在 cookie 中。
您应该改用 req.body.user
的新值并更新 req.user
本身,然后执行 req.login(req.user, ...
var _ = require('lodash');
module.exports = function(req, res, next) {
//using lodash merge the updated user into the cached user
_.merge(req.user, req.body.user);
req.login(req.user, function(err) {
if (err) return next(new Error('Error updating user profile'));
console.log('USER UPDATED *******', req.user);
next();
});
};
我正在尝试使用新名称更新我的用户会话,我认为这是一项简单的任务。
我是登录用户,正在访问 'update' 路由,我定义了自己的中间件来更新会话:
module.exports = function(req, res, next) {
console.log(req.user);
req.login(req.body.user, function(err) {
if (err) return next(new Error('Error updating user profile'));
console.log('USER UPDATED *******', req.user);
next();
});
};
挖掘上面的代码花了一些时间,它应该只是更新 Passport 会话对象。它正确地记录了前一个会话,然后是更新后的会话,但是当我在初始响应后导航到新页面时,用户对象完全丢失,只有 returns {}。
有什么想法吗?
source
要登录用户并将其保存到会话中,passport 使用通常将 user.id
存储为 cookie 的 serialize
函数和检索该 cookie 并执行操作的 deserialize
函数User.findById
数据库调用以查找关联的用户,如果找到一个,那就是存储在 req.user
中的用户对象。
req.login
将您传递给它的任何内容作为第一个参数直接传递给 passport.serialize
,否则它通常来自一个策略,该策略本身会从数据库中检索用户对象调用,或创建一个。
因此,当您使用 req.login
时,您需要将 passport.serialize
实际收到的用户对象传递给它,以便它可以将 id
存储在 cookie 中。
在你的情况下,你正在做 req.login(req.body.user, ...
,因为 req.body.user
来自 POST 表单变量,它不能有 id
那 passport.serialize
会存储在 cookie 中。
您应该改用 req.body.user
的新值并更新 req.user
本身,然后执行 req.login(req.user, ...
var _ = require('lodash');
module.exports = function(req, res, next) {
//using lodash merge the updated user into the cached user
_.merge(req.user, req.body.user);
req.login(req.user, function(err) {
if (err) return next(new Error('Error updating user profile'));
console.log('USER UPDATED *******', req.user);
next();
});
};