用cookie-session表达req.session为空

时间:2018-08-11 20:56:58

标签: node.js express session

当用户登录时,我试图创建一个cookie会话来验证我的路由中的用户:

router.post('/login', (req, res, next) => {
    model.User.findOne({
        email: req.body.email,
        password: hash(req.body.password)
    }).lean().exec().then(
        user => {
            if (!user) {
                return res.status(401).send({message: 'Invalid email and/or password'});
            }
            req.session.user = user;
            req.session.authorized = true;
            console.log(req.session);
            return res.send({token: createJWT(user)});
        }
    ).catch(next);
});

该控制台日志正确显示了会话,但随后当我尝试对路由进行身份验证时

const {Router} = require('express');
const winston = require('winston');

module.exports = router => {
    winston.info('Loading public-api...');
    router.use('/', require('cors')(), require('./public-api')(Router()));

    router.use('/api', require('cors')(), require('./api')(Router().use(global.app.security.authorize())));

    router.use('/auth', require('cors')(), require('./auth')(Router()));
};

然后授权服务

module.exports = () =>
    (req, res, next) => {
    console.log(req.session);
        if (req.session.authorized) {
            req.user = req.session.user;
            return next();
        }
    };

此处req.session为空。

编辑:我想我知道错误来自哪里,我的服务器托管在localhost:6000,但是localhost:3000的客户端,我如何使它工作。

1 个答案:

答案 0 :(得分:0)

如果两个应用程序都在不同的服务器(不同的主机或端口)上运行,则可以为服务器应用程序设置客户端应用程序的代理,以便客户端应用程序与服务器应用程序在同一服务器上运行。这样,将在同一服务器(主机和端口)内发出请求。

客户端应用中的

package.json

"proxy": "http://localhost:6000"