我使用Angular 6并且很难将Django的csrf与Angular集成。 我发现in this thread Django在登录时更改了令牌,因为我可以使用相同的新会话使用发布请求进行注册和登录,但在登录后不发布任何内容似乎有意义。
问题变成了我如何在登录时重置csrf令牌。现在在我的Angular应用程序中处理csrf的方式显示在我的app模块的以下代码中:
import { BrowserModule } from '@angular/platform-browser';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { NgModule } from '@angular/core';
import { HttpClientModule } from '@angular/common/http';
import { HttpModule, XSRFStrategy, CookieXSRFStrategy } from '@angular/http'
import { AppComponent } from './app.component';
import { AppRoutingModule } from './app-routing.module';
import { RegisterComponent } from './register/register.component';
import { LoginComponent } from './login/login.component';
import { AlertComponent } from './_directives/alert.component';
import { ProfileComponent } from './profile/profile.component';
import { AuthGuardService } from './_guards/auth-guard.service';
import { AlertService } from './_services/alert.service';
import { AuthService } from './_services/auth.service';
import { UserService } from './_services/User.service';
@NgModule({
declarations: [
AppComponent,
RegisterComponent,
LoginComponent,
AlertComponent,
ProfileComponent,
],
imports: [
BrowserModule,
FormsModule,
ReactiveFormsModule,
AppRoutingModule,
HttpClientModule,
HttpModule
],
providers: [
{
provide: XSRFStrategy,
useValue: new CookieXSRFStrategy('csrftoken', 'X-CSRFToken')
}
],
bootstrap: [AppComponent]
})
export class AppModule { }
所以我的问题是,如何让我的应用程序重置登录时的值? (不一定是专门登录,但如何重置该值。)
答案 0 :(得分:2)
很好的问题,这有点棘手,我的反应非常不经过考验。但是,由于我找不到任何一篇文章/文章,我决定在阅读多个来源后放下我对这个问题的看法:
Angular的HttpClient内置支持该技术的客户端一半。在HttpClient指南中阅读更多内容。
您可以在Angular 1:
中按如下方式设置键名`$httpProvider.defaults.xsrfCookieName = 'csrftoken';`
`$httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken';`
Angular 2及以上可以达到同样的目的:
bootstrap(AngularApp, [
HTTP_PROVIDERS,
provide(XSRFStrategy, {useValue: new CookieXSRFStrategy('csrftoken', 'X-CSRFToken')})
]);
由于django不提供角度app,为了让 要设置的cookie,角度应用程序需要对django执行GET请求 第一
CSRF_USE_SESSIONS
如果False
设置为Unknown
,则表示Django将CSRF令牌值设置为Cookie的一部分
相关阅读: