我有一个MERN堆栈博客应用程序,正在作为学习练习进行。我在前端比较舒适,但是在节点方面的经验有限。在完成一些教程之后,我将添加身份验证。我正在使用passport.js作为向Google请求,获取ID并另存为会话信息的框架。但是,登录后,发出发布请求时req.session为空,即使我可以在开发工具中看到一个cookie。
我正在使用bcrypt的哈希值来掩盖实际的ID,但这可能不是最佳实践。
在blogAuth.js中:定义了req.session。
bcrypt.hash(req.user._id.toString(), saltRounds, function(err, hash) {
req.session.user = hash;
//session is set here.
console.log(req.session); res.redirect(
http://localhost:8080/articles/loggedIn );
});
但是在api / articles.js中:req.session为空
router.post("/", (req, res, next) => {
const { body } = req;
// session is empty here. Why?
console.log(
会话用户,$ {req.session.user} );
console.log(req.session);
我尝试过:
在客户端package.json中包含代理: express req.session empty with cookie-session
在从POST发送POST时使用withCredentials设置为true 客户:Node + Express + Passport: req.user Undefined
重新排列中间件的顺序:路由必须始终存在 之后,但我觉得我盲目地这样做,通常会导致错误
以下是一些相关文件:
服务器端: -app.js -blogAuth.js -passport.js -api/articles.js
客户端: -the POST req
我认为这是订购问题。什么是确保我正确订购中间件的好方法?或者,如果订单看起来正确,那么这个问题还会从何而来?
答案 0 :(得分:1)
您正尝试同时使用cookie-session
和express-session
。由于这两个对象都将试图控制req.session
对象的命运,因此您将始终以空会话结束。
只需删除其中之一,您的会话就会保留。