实际上,我们的后端使用请求头中的Cookie对请求进行身份验证.我知道如果我设置一个标题"Cookie"它会拒绝的.那么,有没有办法把Cookie送到后端呢?

推荐答案

我猜有一个阶段,你要求服务器验证你的身份.接下来(如果身份验证成功),服务器将在响应中返回一个cookie.浏览器将存储此cookie,并在每次通话时再次发送.

也就是说,在跨域请求(CORS)的情况下,您需要将XHR的withCredentials设置为true,以使浏览器在您的请求中添加cookie.

为了使用Angular2实现这一点,我们需要扩展BrowserXhr类,如下所述:

@Injectable()
export class CustomBrowserXhr extends BrowserXhr {
  constructor() {}
  build(): any {
    let xhr = super.build();
    xhr.withCredentials = true;
    return <any>(xhr);
  }
}

并用扩展的

bootstrap(AppComponent, [
  HTTP_PROVIDERS,
  provide(BrowserXhr, { useClass: CustomBrowserXhr })
]);

有关更多详细信息,请参阅此问题:

Edit (following the 100's comment)

从RC2中,您可以直接在请求配置中使用withCredentials属性,如下所述:

this.http.get('http://...', { withCredentials: true })

Edit (following the [maxou] comment)

记住要包括withCredentials:true on every request.

Angular相关问答推荐

如何在init为FALSE时以Angular 初始化主拇指擦除器-Swiper 11.0.6Angular 17 SSR

判断哪个Angular 信号导致了影响

ANGLING HTTP.GET()返回包含数据的数组

如何将角17中的嵌套组件与独立组件一起使用?

Angular *ngIf 表达式中这么多冒号的作用是什么?

Angular 14 类型表单 - 数字控件的初始值

在组件级别加载 JS 脚本(不在启动时)

Angular 2.0 中 $scope 的替代品

如何在angular material中使用输入类型文件

即使 withCredentials 为真,Angular 也不会发送在 Set-Cookie 中收到的 Cookie

使用 Angular2 将文件上传到 REST API

相对于根目录的 SCSS 导入

当父组件上的变量发生变化时重新加载子组件

使用 formControlName 和 ngModel 的Angular 6 警告

Angular 4:InvalidPipeArgument:管道AsyncPipe的[object Object]

Angular 2 应用程序中没有Access-Control-Allow-Origin标头

如何每隔一段时间发出 HTTP 请求?

如何在 Angular 5 react式表单输入中使用管道

如何将从后端渲染的参数传递给angular2 bootstrap 方法

Angular2:CoreModule 与 SharedModule