Получение и вставка значения файла cookie CSRF, установленного Django в Angular - PullRequest
0 голосов
/ 25 мая 2018

У меня возникли проблемы с работой интеграции CSRF между Django и Angular.Я сделал более широкий пост об этом здесь. .Проблема заключается в том, что вошедшие в систему пользователи не могут отправлять пост-запросы из внешнего интерфейса, но они могут делать те же самые запросы из API-интерфейса Django с помощью форм.

Я устанавливаю {% csrf_token%} в шаблоне индекса, который обслуживает Django, и я использую встроенную в Angular стратегию XSRFS для установки атаки заголовка на http-запросы, но я думаю, что проблема в том, что я не улавливаю значение, предоставленное сгенерированным токеном Django csrf, и не могувыяснить, как осуществить сбор этих данных и присоединение их к моим куки-файлам Angular http.Вот код для модуля, который обеспечивает стратегию:

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 { }

А вот вывод из браузера со значением csrf, которое, я думаю, мне нужно как-то присоединить:

<input type='hidden' name='csrfmiddlewaretoken' value='9FKUKSXHbJfLClZniDXIHrMu2AEUtPQr4mGDfNSOZURHYVyKGBYvREIuucN0UsEM' />
<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>AngularWebapp</title>
  <base href="/">

  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="icon" type="image/x-icon" href="favicon.ico">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
</head>
<body>
  <app-root></app-root>

<script type="text/javascript" src="/static/runtime.js"></script><script type="text/javascript" src="/static/polyfills.js"></script><script type="text/javascript" src="/static/styles.js"></script><script type="text/javascript" src="/static/vendor.js"></script><script type="text/javascript" src="/static/main.js"></script>
<script src="https://code.jquery.com/jquery-2.2.4.min.js" integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44=" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>

</body>
</html>

1 Ответ

0 голосов
/ 25 мая 2018

Убедитесь, что "csrfmidlewaretoken": {{csrf_token}} отправлено с формой.

Убедитесь, что {% csrf_token %} находится внутри <form></form> тегов.Если вы публикуете данные с помощью ajax, добавьте "csrfmidlewaretoken": {{csrf_token}} к отправляемым данным формы.

...