Не установлен 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, так ли это должно быть?

0 ответов

Другие вопросы по тегам