我已经阅读了the docs篇以及所有相关的问题,但Angular的XSRF机制对我来说仍然不起作用:我无法在自动附加X-XSRF-TOKEN头的情况下发出POST请求.

我有一个带登录表单的Angular 6应用程序.

它是Symfony(PHP7.1)网站的一部分,当Symfony提供Angular应用程序页面时,会发送正确的Cookie(XSRF-TOKEN):

enter image description here

我的apply.单元ts包括正确的模块:

// other imports...
import {HttpClientModule, HttpClientXsrfModule} from "@angular/common/http";

// ...
@NgModule({
  declarations: [
    // ...
  ],
  imports: [
    NgbModule.forRoot(),
    BrowserModule,
    // ...
    HttpClientModule,
    HttpClientXsrfModule.withOptions({
      cookieName: 'XSRF-TOKEN',
      headerName: 'X-CSRF-TOKEN'
    }),
    // other imports
  ],
  providers: [],
  entryComponents: [WarningDialog],
  bootstrap: [AppComponent]
})
export class AppModule {
}

然后,在服务的方法中,我发出以下http请求(this.httpHttpClient的一个实例):

this.http
    .post<any>('api/login', {'_username': username, '_pass': password})
    .subscribe(/* handler here */);

post请求从不发送X-XSRF-TOKEN头.为什么?

推荐答案

问题再次在于Angular的糟糕文档.

事实上,Angular将在服务器端生成XSRF-TOKEN cookie时添加X-XSRF-TOKENonly if,选项如下:

  • 路径=/
  • httpOnly=false(这非常重要,完全是undocumented)

此外,Angular应用程序和被调用的URL必须位于同一台服务器上.

参考:this Angular Github issue

Typescript相关问答推荐

如何在ts中使用函数重载推断参数类型

contextPaneTitleText类型的参数不能分配给remoteconfig类型的关键参数'""'''

泛型函数中输入参数类型的推断问题

类型,其中一条记录为字符串,其他记录为指定的

如何使用类型谓词将类型限制为不可赋值的类型?

我可以使用TypeScrip从字符串词典/记录中填充强类型的环境对象吗?

有没有可能为这样的函数写一个类型?

从非文字数组(object.keys和array.map)派生联合类型

为什么TS2339;TS2339;TS2339:类型A上不存在属性a?

抽象类对派生类强制不同的构造函数签名

如何正确地将元组表格输入到对象数组实用函数(如ZIP)中,避免在TypeScrip 5.2.2中合并所有值

Typescript .根据枚举输入参数返回不同的对象类型

如何在本地存储中声明该类型?

三重融合视角与正交阵

编剧- Select 下拉框

VUE 3类型';字符串';不可分配给类型';参考<;字符串&>

如何从抽象类的静态方法创建子类的实例?

如何调整项目数组,但允许权重影响顺序

T的typeof键的Typescript定义

如何提取具有索引签名的类型中定义的键