node.js - 登录在 Postman 中持续存在,但在使用 Angular 的浏览器中不存在
问题描述
我在 node.js 上有一个 API,带有 express。此 API 将用户登录。我使用 passsport 对其进行身份验证。
我有两条路线:/登录和/公司。首先,用户必须登录系统,他收到令牌,我登录。之后,他/她必须访问路线/公司,但是,他们必须登录。
为了验证用户是否登录,我使用 req.user。这是路线/公司上的用户登录验证代码:
exports.list = function (req, res, next) {
console.log(req.user);
if (!req.user) {
return res.status(404).send("Precisa estar logado.");
}
...
这是我的服务器设置:
app.use(bodyParser.urlencoded({
extended: true
}));
app.use(bodyParser.json());
app.set('trust proxy', 1) // trust first proxy
app.use(session({
secret: 'MotomcoGroupAjm999MOTOMCO',
resave: false,
saveUninitialized: true,
cookie: { httpOnly: false }
}))
// Flash - Gerenciador de mensagens de resposta do servidor.
app.use(flash());
app.use(pass.initialize());
app.use(pass.session());
使用 Postman 进行测试时,我可以毫无问题地访问 / 公司,但是当我尝试访问时,登录后,通过浏览器,我陷入 (!req.user)
.
这是饼干的问题吗?在使用 Angular 向服务器发出请求时,我尝试使用 withCredentials,但是没有成功。
问题:当我使用 Angular 进行测试时,为什么会话被写入 Postman 测试但没有记录在浏览器中?我忘记在客户端做什么?
解决方案
问题出在CORS上。这是我为解决问题所做的:
var cors = require('cors');
app.use(cors({origin:true,credentials: true}));
并且,设置标题:
app.use(function (req, res, next) {
res.header('Access-Control-Allow-Credentials', true);
res.header('Access-Control-Allow-Origin', req.headers.origin);
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
res.header('Access-Control-Allow-Headers', 'Origin, Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version, X-Response-Time, X-PINGOTHER, X-CSRF-Token,Authorization');
if (req.method === "OPTIONS") {
return res.status(200).end();
} else {
next();
}
});
推荐阅读
- flexbox - Angular Material Flex Layout - 使 div 宽度适合内容
- python - 有没有办法对 BeautifulSoup 进行逆向工程?将csv内容转换为html?
- c# - 支架后的实体框架核心导航属性命名约定
- python - 大地理空间数据技术解决方案
- node.js - 共享主机上的 Angular SSR,
- azure - 从 Azure SQL 仓库中清除或删除旧数据
- flutter - 为什么在 facebook 在颤动中登录数据后未调用 futureBuilder 回调?
- powershell - Powershell cmdlet 忽略数组参数
- popup - 当弹出窗口查看另一个弹出窗口时,ngx-bootstrap BsModalRef.hide() 方法不起作用,也不会隐藏第二个弹出窗口
- python - tkinter:将按钮堆叠在彼此之上