Не удается отправить сообщение http с учетными данными на сервер узла iis - PullRequest
0 голосов
/ 03 сентября 2018

Я пытаюсь отправить http-запрос из моего углового приложения на мой сервер node.js с учетными данными пользователя для его регистрации. Оба размещены в IIS (сервер узла с nodeiis), и оба настроены для проверки подлинности с помощью проверки подлинности Windows.

Мой угловой код:

var url = "http://myurl:15001/addItem";
this.http.post(url, {
    "itemName": "SomeName",
    "itemColor": "SomeColor"
}, {withCredentials: true}).subscribe(res =>{
    console.log("Great, item was added");
})

Мой код Node.js:

var app = express();
var allowCrossDomain = function (req, res, next){
res.header('Access-Control-Allow-Origin', "http://myurl") //Cannot be a wildcard because of the credentials.
res.header('Access-Control-Allow-Credentials', true);
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization');

if(res.method == 'OPTIONS')
    res.send(200);
else
    next();
};
app.use(allowCrossDomain);

app.post('/addItem', function(req, res){
    //Saves the item...

    res.setHeader('Access-Control-Allow-Origin', 'http://myurl')
    res.status(200);
    res.send(true);
});

Когда я делаю запрос, я получаю следующую ошибку на консоль:

ОПЦИИ http://myurl:15001/addItem 401 (не авторизовано)

XMLHttpRequest не может загрузить http://myurl:15001/addItem. Ответ на предпечатная проверка не проходит проверку контроля доступа: нет Заголовок «Access-Control-Allow-Origin» присутствует в запрошенном ресурс. Origin 'http://myurl', поэтому бот имеет доступ. в ответе был код состояния HTTP 401.

Когда я пытаюсь сделать то же самое с моим запросом http get, все работает правильно, и я получаю результат. Я не знаю, почему мой запрос OPTIONS является несанкционированным, когда я отправляю 200 кодов для каждого запроса OPTIONS.

Я пытался использовать пакет cors node.js, но это не помогло, возможно, я не использовал это правильно.

Может ли кто-нибудь объяснить мне, как я могу решить эту проблему и сделать так, чтобы мой пост http прошел предпечатную проверку? Большое спасибо!

1 Ответ

0 голосов
/ 03 сентября 2018

Если вы используете Angular 6, он поддерживает proxy.conf, который будет прокси-сервер URL-адреса Backend API. Для более подробной информации, вот ссылка https://github.com/angular/angular-cli/blob/master/docs/documentation/stories/proxy.md

...