Как заставить сессии функционировать должным образом в кросс-домене? - PullRequest
0 голосов
/ 29 сентября 2019

Я использую MEAN стек.Он не позволит мне получить доступ к домашней странице, когда я посещаю путь на угловом порту 4200, но когда я посещаю путь на порту 3000 с сервера, он теперь дает мне доступ к домашней странице.

Back end

 // 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) => {
           // code 
        });
          // 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, он все равно сохраняет сеанс в БД.Но это все равно не позволит мне посетить домашнюю страницу.И когда я захожу в путь / блог на порту 3000, он сохраняет сеанс, а затем дает доступ к домашней странице.

router.route("/blog").get((req, res) => {
    req.session.user = 1; // SESSION
});

Edit

Кажется, Cors - это проблема, которую вы, ребята, поднимаете, но у меня действительно есть cors, установленные в основном файле js.Есть ли что-то еще, что мне нужно добавить в cors?

app.use(cors({  
    origin: "http://localhost:4200",
    credentials: true
}));

1 Ответ

0 голосов
/ 30 сентября 2019

Вы должны использовать модуль 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.com/package/cors

Для меня это очень похоже на проблему с корсом, и я не вижу в вашем вопросе никакого упоминания о том, как вы справляетесьCORS.

...