Не установлен cookie сессии во время запроса POST в Angular2
У меня есть приложение, которое состоит из внутреннего и внешнего интерфейса, написанного с Angular 2. Когда первый запрос запускается из внешнего интерфейса, серверная часть создает объект сеанса и отправляет ответ с Set-Cookie:JSESSIONID=29F2635FE558F131DCF937567E4C09C1;path=/;HttpOnly
заголовок (или другой сгенерированный идентификатор). Браузер правильно устанавливает cookie, и когда я выполняю запросы с Http
"s get()
метод и использование withCredentials: true
в options
объект, все работает нормально Но когда я делаю то же самое для почтового запроса с post()
метод, заголовок cookie не устанавливается по какой-то причине, и я не могу пройти мимо фильтра авторизации на бэкэнде.
Кто-нибудь видел такое поведение? Что может быть причиной этого? Запрос не выполняется OPTIONS
предполетный. Это настолько странно, что я даже не знаю, какая дополнительная информация может быть полезной, поэтому, если у вас есть идеи - пожалуйста, дайте мне знать, я предоставлю любую необходимую информацию.
Примеры:
Вот как я получаю информацию о книгах (и все работает нормально):
this.networker.get(PATHS.base + PATHS.books, {search: this.params, withCredentials: true})
.map((resp: Response) => {
return resp.json() as Book[];
});
Вот так я пытаюсь добавить нового автора в каталог
public addAuthor(author: Author): Observable<boolean> {
const headers: Headers = new Headers();
headers.append('Content-Type', 'application/json');
const options: RequestOptions = new RequestOptions({withCredentials: true, headers: headers});
return this.networker.post(PATHS.base + PATHS.authors, JSON.stringify(author), options)
.map((resp: Response) => {
return resp.text().localeCompare('true') === 0;
})
}
Сетевой сервис - это просто оболочка для Angular's Http
как я пытался понять, где происходит ошибка:
@Injectable()
export class NetworkerService {
constructor(private http: Http) {
}
public get(url: string, options: any): Observable<Response> {
return this.http.get(url, options);
}
public post(url: string, body: any, options: any): Observable<any> {
return this.http.post(url, body, options);
}
}
UPD: прямо сейчас я добавил логику в фильтр запросов на серверной части, который позволяет OPTIONS
запрос пройти мимо него без cookie, и он работает, поэтому фактическое POST
запрос содержит cookie. Кажется, проблема в том, что в предпечатном запросе нет необходимого cookie, так ли это должно быть?