#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
значением заголовка. Это противоречит назначению функций безопасности браузеров.