如何使会话在跨域中正常运行?
我正在使用MEAN堆栈。当我访问角度端口4200上的路径时,它不会允许我访问主页,但是当我从服务器访问端口3000上的路径时,它现在使我可以访问主页。
后端
// Middleware
const redirectLogin = ((req, res, next) => {
if (!req.session.user) {
res.status(200).json({ loggedIn: false });
}
else
next();
});
// Route
router.route("/home").get(redirectLogin, (req, res) => {
Blog.find((err, docs) => {
if (err)
console.log(err);
else
res.json(docs);
});
});
// Where session is created if user logs in successfully
router.route("/users/login").post((req, res) => {
// more code here
res.status(200).json({ loggedIn: true });
req.session.regenerate((err) => {
req.session.user = user.id; // User holds session
req.session.save(() => {}); // Session is now saved in db
});
前端,来自我的服务
homePage() {
return this.http.get(`${this.uri}/home`, { withCredentials: true }).subscribe((data) => {
if (data["loggedIn"] === false)
this.router.navigate(["/users/login"]);
else
this.router.navigate(["/home"]);
});
}
我发现更令人困惑的是,当我在端口4200上访问路径/ blog时,它仍将会话保存在数据库中。但这仍然不允许我访问主页。当我在端口3000上访问路径/ blog时,它保存了会话,然后允许访问主页。
router.route("/blog").get((req, res) => {
req.session.user = 1; // SESSION
});
回答如下:您应该使用npm cors模块。命令行:npm install cors
var express = require('express')
var cors = require('cors')
var app = express()
app.use(cors()); //This line will do the trick
https://www.npmjs/package/cors
如何使会话在跨域中正常运行?
我正在使用MEAN堆栈。当我访问角度端口4200上的路径时,它不会允许我访问主页,但是当我从服务器访问端口3000上的路径时,它现在使我可以访问主页。
后端
// Middleware
const redirectLogin = ((req, res, next) => {
if (!req.session.user) {
res.status(200).json({ loggedIn: false });
}
else
next();
});
// Route
router.route("/home").get(redirectLogin, (req, res) => {
Blog.find((err, docs) => {
if (err)
console.log(err);
else
res.json(docs);
});
});
// Where session is created if user logs in successfully
router.route("/users/login").post((req, res) => {
// more code here
res.status(200).json({ loggedIn: true });
req.session.regenerate((err) => {
req.session.user = user.id; // User holds session
req.session.save(() => {}); // Session is now saved in db
});
前端,来自我的服务
homePage() {
return this.http.get(`${this.uri}/home`, { withCredentials: true }).subscribe((data) => {
if (data["loggedIn"] === false)
this.router.navigate(["/users/login"]);
else
this.router.navigate(["/home"]);
});
}
我发现更令人困惑的是,当我在端口4200上访问路径/ blog时,它仍将会话保存在数据库中。但这仍然不允许我访问主页。当我在端口3000上访问路径/ blog时,它保存了会话,然后允许访问主页。
router.route("/blog").get((req, res) => {
req.session.user = 1; // SESSION
});
回答如下:您应该使用npm cors模块。命令行:npm install cors
var express = require('express')
var cors = require('cors')
var app = express()
app.use(cors()); //This line will do the trick
https://www.npmjs/package/cors