Проблема с Angular2, NodeJS и паспортом

#javascript #node.js #angular #passport.js

#javascript #node.js #angular #passport.js

Вопрос:

В настоящее время мой интерфейс Angular2 работает localhost:3000 , а серверная часть NodeJS (на основе KrakenJS) работает localhost:8000 . Когда я ввожу учетные данные, я вызываю this.http.post('http://localhost:8000/login', body, { headers: contentHeaders }) api, но получаю следующий ответ в Chrome:

 XMLHttpRequest cannot load http://localhost:8000/login. The request was redirected to 'http://localhost:8000/', which is disallowed for cross-origin requests that require preflight.
  

Но когда я вызываю this.http.post('http://localhost:8000/register', body, { headers: contentHeaders }) , все работает нормально и выполняет всю магию регистрации (хеширование pswd, хранение данных в базе данных и т. Д.).

Вот мой простой register API от (register.js ):

  router.post('/', function (req, res) {

    if (req.body.email amp;amp; req.body.password) {
        var User = require('../../models/user');

        User.create({
            name: req.body.name,
            email: req.body.email,
            password: req.body.password
        }).then(
            function() {
                res.render('user/registered', {registered: true});
            },
            function() {
                res.render('user/registered', {registered: false});
            }
        );
    } else {
        res.render('user/registered', {registered: false});
    }
});
  

Вот api входа из (login.js ):

  router.post('/', function (req, res) {

    passport.authenticate('local', {
        successRedirect: req.session.goingTo || '/',
        failureRedirect: '/login',
        failureFlash: true
    })(req, res);

});
  

Ответ №1:

Включите CORS в вашем основном файле сервера с помощью:

 app.use(function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  next();
});
  

Комментарии:

1. * не должно быть вашим Access-Control-Allow-Origin значением заголовка. Это противоречит назначению функций безопасности браузеров.