Integração com Django
Autenticação por cookie + CSRF
O Django adiciona proteção contra Cross Site Request Forgery exigindo o header 'X-CSRFToken' nas requisições.
Além disso, a autenticação do Django usa cookies, portanto precisamos enviar as credenciais com fetch credentials. Se você usa um tipo de autenticação diferente do padrão 'django.contrib.auth', veja o guia de autenticação para mais exemplos.
getCookie
DjangoEndpoint
MyResource
import { RestEndpoint, type RestGenerics } from '@data-client/rest'; import getCookie from './getCookie'; export default class DjangoEndpoint< O extends RestGenerics = any, > extends RestEndpoint<O> { async getRequestInit(body: any): Promise<RequestInit> { return { ...(await super.getRequestInit(body)), credentials: 'same-origin', }; } getHeaders(headers: HeadersInit) { if (this.method === 'GET') return headers; return { ...headers, 'X-CSRFToken': getCookie('csrftoken'), }; } }
▶Usage
import { MyResource } from './MyResource'; MyResource.get({ id: 1 });
Request
GET /my/1
content-type: application/json
cookie: session=abc;
x-csrftoken: xyz
Response200 OK
{
"id": "1",
"title": "this post"
}