Angular2 替换 $httpProvider.defaults.withCredentials

2024-01-21

我有完全相同的问题this https://stackoverflow.com/questions/17064791/http-doesnt-send-cookie-in-requests但对于 Angular 2 来说是个问题。

总而言之,当向另一个域发送 HTTP 请求时,即使正确设置了 CORS 标头,JSESSIONID cookie 也不会一起发送。 Angular 1.x 的解决方案是设置以下配置:

.config(function ($routeProvider, $httpProvider) {
    $httpProvider.defaults.withCredentials = true;
    //rest of route code

但是我找不到 Angular 2 的任何替代解决方案。

任何想法?谢谢!


您需要扩展默认的 Http 服务并将 withCredentials 设置为 true

http.service.ts

import { Injectable } from '@angular/core';
import { Headers, Http, Request, RequestOptions, Response, XHRBackend } from '@angular/http';
import { Observable } from 'rxjs/Observable';

@Injectable()
export class HttpService extends Http {
  constructor(backend: XHRBackend, options: RequestOptions) {
    super(backend, options);
  }

  request(url: string | Request, options?: any): Observable<Response> {
    if (typeof url === 'string') {
        if (!options) {
            options = {headers: new Headers()};
        }
        options.withCredentials = true;
    } else {
        url.withCredentials = true;
    }

    return super.request(url, options);
  }
}

http.service.factory.ts

import { RequestOptions, XHRBackend } from '@angular/http';
import { HttpService } from './http.service';

export function HttpServiceFactory(backend: XHRBackend, defaultOptions: RequestOptions) {
  return new HttpService(backend, defaultOptions);
};

在你的模块文件中你需要替换你的http服务

import { HttpServiceFactory } from './http.service.factory';
import { Http, RequestOptions, XHRBackend } from '@angular/http';

...

providers: [
  {
    provide: Http,
    useFactory: HttpServiceFactory,
    deps: [XHRBackend, RequestOptions]
  }
]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular2 替换 $httpProvider.defaults.withCredentials 的相关文章

随机推荐