【发布时间】: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 的。