Saltar al contenido principal

Integración con Django

Django añade protección contra Cross Site Request Forgery, al requerir el header 'X-CSRFToken' en las peticiones.

Además, la autenticación de Django usa cookies, por lo que debemos enviar las credenciales con fetch credentials. Si usas un tipo de autenticación distinto del 'django.contrib.auth' por defecto, consulta la guía de autenticación para ver más ejemplos.

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