【问题标题】:express req.session empty with cookie-session用 cookie-session 表达 req.session 为空
【发布时间】:2019-01-19 02:00:37
【问题描述】:

我正在尝试创建一个 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 我怎样才能让它工作。

【问题讨论】:

  • 你是什么意思客户端在3000,而服务器在600o?
  • 不同的端口,不同的应用程序,我有一个 react.js 应用程序向该服务器发出请求,但我似乎无法找到会话未保存的原因
  • 谁设置会话cookie?它有什么域名?默认情况下,cookie 不是跨域的。你需要很多 cors 机器才能让它工作。
  • 我对此有点陌生,不知道,也许我的方法不好,我想做的是对我的路线进行身份验证,所以只允许某些用户访问路线。
  • 您绝对可以将 cors 配置为允许跨域 cookie。检查访问控制允许凭据和获取 API 的凭据选项。 Otoh,您可能从一开始就拥有两项服务,从而过度设计了东西。尝试使用一个同时进行渲染和 API 的。

标签: node.js express session


【解决方案1】:

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

客户端应用中的 package.json

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

【讨论】:

    猜你喜欢
    • 2018-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-09
    • 1970-01-01
    • 2020-09-12
    • 2014-01-05
    • 2021-09-06
    相关资源
    最近更新 更多