Невозможно создать cookie для csrftoken при вызове API входа из клиента Angular 5 - PullRequest
0 голосов
/ 04 мая 2019

Мой бэкэнд использует Django / DRF для написания API. и мой интерфейс использует Angular 5 для пользовательского интерфейса. Я пытаюсь реализовать механизм аутентификации с помощью токена csrf.

  1. Когда я пытаюсь вызвать API от почтальона, создается файл csrf cookie.

см. Мой вывод отладчика ниже:

    (Pdb) request.COOKIES
    {'csrftoken': 'KceUKnl9XmNSkoTJS1HbiDoS9Gm5jJ7buvmYQp4rTkzzgTMkprjcmeqR9zUi0azB'}
    (Pdb)
  1. Когда я вызываю тот же API со стороны Angular 5, файл csrf cookie не генерируется. см. нижеприведенный вывод отладчика:
    (Pdb) request.COOKIES
    {}
    (Pdb)

Я действительно сбит с толку, API-интерфейс такой же, но при вызове со стороны Angular поведение другое.

Мой угловой код:

  1. В импорте
    imports: [
        HttpClientModule,
        HttpClientXsrfModule.withOptions({
            cookieName: 'csrftoken',
            headerName: 'X-CSRFToken',
          }
        ),
      ],
  1. Код перехватчика:
    @Injectable()
    export class HttpXsrfInterceptor implements HttpInterceptor {

      constructor(private tokenExtractor: HttpXsrfTokenExtractor) {
      }

      intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
        const headerName = 'X-CSRFToken';
        let token = this.tokenExtractor.getToken() as string;
        if (token !== null && !req.headers.has(headerName)) {
          req = req.clone({
            headers: req.headers.set(headerName, token),
            withCredentials: true
          });
        }
        return next.handle(req);
      }
    }
  1. Код провайдера:
providers: [
     AuthService,
     DatePipe,
     SidebarService,
     AuthGuard,
     {
       provide: HTTP_INTERCEPTORS,
       useClass: HttpXsrfInterceptor,
       multi: true
     }
   ]

Может кто-нибудь помочь мне справиться с этой проблемой? Я могу предоставить больше информации, если нужно.

...