Мой бэкэнд использует Django / DRF для написания API. и мой интерфейс использует Angular 5 для пользовательского интерфейса. Я пытаюсь реализовать механизм аутентификации с помощью токена csrf.
- Когда я пытаюсь вызвать API от почтальона, создается файл csrf cookie.
см. Мой вывод отладчика ниже:
(Pdb) request.COOKIES
{'csrftoken': 'KceUKnl9XmNSkoTJS1HbiDoS9Gm5jJ7buvmYQp4rTkzzgTMkprjcmeqR9zUi0azB'}
(Pdb)
- Когда я вызываю тот же API со стороны Angular 5, файл csrf cookie не генерируется. см. нижеприведенный вывод отладчика:
(Pdb) request.COOKIES
{}
(Pdb)
Я действительно сбит с толку, API-интерфейс такой же, но при вызове со стороны Angular поведение другое.
Мой угловой код:
- В импорте
imports: [
HttpClientModule,
HttpClientXsrfModule.withOptions({
cookieName: 'csrftoken',
headerName: 'X-CSRFToken',
}
),
],
- Код перехватчика:
@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);
}
}
- Код провайдера:
providers: [
AuthService,
DatePipe,
SidebarService,
AuthGuard,
{
provide: HTTP_INTERCEPTORS,
useClass: HttpXsrfInterceptor,
multi: true
}
]
Может кто-нибудь помочь мне справиться с этой проблемой? Я могу предоставить больше информации, если нужно.