一尘不染

使用angular2 http请求和Django CSRF保护的正确方法是什么?

django

在Angular1中,可以通过配置$ http-provider解决此问题。喜欢:

app.config(function($httpProvider) {
  $httpProvider.defaults.xsrfCookieName = 'csrftoken';
  $httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken';
});

在Angular2中做同样的事情是什么好习惯?

在Angular2中使用http请求,我们需要使用Http类。当然,将CSRF行添加到每个后功能调用中不是一个好习惯。

我猜在Angular2中,我应该创建自己的类,该类继承Angular2的Http类并重新定义后功能。是正确的方法还是更优雅的方法?


阅读 359

收藏
2020-03-28

共2个答案

一尘不染

Victor K的答案是完全正确的,但是从2.0.0-rc.2角度来看,一种首选的方法是使用CookieXSRFStrategy,如下所示,

bootstrap(AngularApp, [
  HTTP_PROVIDERS,
  provide(XSRFStrategy, {useValue: new CookieXSRFStrategy('csrftoken', 'X-CSRFToken')})
]);
2020-03-28
一尘不染

现已发布Angular 2,以下似乎是使用的正确方法CookieXSRFStrategy

我已将我的应用程序配置为具有核心模块,但是你可以在主应用程序模块中执行相同的操作:

import { ModuleWithProviders, NgModule, Optional, SkipSelf } from '@angular/core';
import { CommonModule }   from '@angular/common';
import { HttpModule, XSRFStrategy, CookieXSRFStrategy } from '@angular/http';

@NgModule({
    imports: [
        CommonModule,
        HttpModule
     ],
    declarations: [ ],
    exports: [ ],
    providers: [
        {
            provide: XSRFStrategy,
            useValue: new CookieXSRFStrategy('csrftoken', 'X-CSRFToken')
        }
    ]
})


export class CoreModule {
}, 
2020-03-28