angular 2 http с учетными данными

Я пытаюсь использовать withCredentials для отправки файла cookie в свою службу, но не могу понять, как его реализовать. В документах говорится: «Если серверу требуются учетные данные пользователя, мы включим их в заголовках запросов». Без примеров. Я пробовал несколько разных способов, но мой файл cookie все равно не отправляется. Вот мой код до сих пор.

private systemConnect(token) {
    let headers = new Headers();
    headers.append('Content-Type', 'application/json');
    headers.append('X-CSRF-Token', token.token);
    let options = new RequestOptions({ headers: headers });
    this.http.post(this.connectUrl, { withCredentials: true }, options).map(res => res.json())
    .subscribe(uid => {
        console.log(uid);
    });
}

person Lindstrom    schedule 27.07.2016    source источник


Ответы (3)


Попробуйте изменить свой код следующим образом

let options = new RequestOptions({ headers: headers, withCredentials: true });

и

this.http.post(this.connectUrl, <stringified_data> , options)...

как видите, вторым параметром должны быть данные для отправки (используя JSON.stringify или просто '') и все параметры в третьем параметре.

person Oleg Barinov    schedule 27.07.2016
comment
Он уже есть внутри комментариев к исходным файлам Headers и RequestOptions ) Пока официальная документация по API не готова — вместо этого приходится использовать комментарии в исходниках ) - person Oleg Barinov; 27.07.2016
comment
Теперь это устарело из-за того, что HttpClient является стандартным - person Brad Johnson; 03.02.2018
comment
Правильное решение с HttpClient здесь: на каждый запрос cors cookie"> stackoverflow.com/questions/47304912/ - person tbo47; 29.03.2018

Начиная с Angular 4.3, Появились HttpClient и Interceptors.

Краткий пример показан ниже:

@Injectable()
export class WithCredentialsInterceptor implements HttpInterceptor {

    intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {

        request = request.clone({
            withCredentials: true
        });

        return next.handle(request);
    }
}

constructor(
      private http: HttpClient) {

this.http.get<WeatherForecast[]>('api/SampleData/WeatherForecasts')
    .subscribe(result => {
        this.forecasts = result;
    },
    error => {
        console.error(error);
    });
person Alexei - check Codidact    schedule 10.04.2018

Создание Interceptor было бы хорошей идеей для вставки материала в заголовок приложения. С другой стороны, если вы ищете быстрое решение, которое необходимо выполнить на уровне каждого запроса, попробуйте установить withCredentials на true, как показано ниже.

const requestOptions = {
 headers: new HttpHeaders({
  'Authorization': "my-request-token"
 }),
 withCredentials: true
};
person James Poulose    schedule 25.11.2018