跳到主要内容

Django 集成

Django 通过要求请求中带有 'X-CSRFToken' 请求头来防御跨站请求伪造。

此外,Django 的认证使用 cookies,因此我们需要发送凭据(fetch credentials)。如果你使用的认证方式不是默认的 'django.contrib.auth',请参阅认证指南获取更多示例。

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 });
GET/my/1
cookie
session=abc;
x-csrftoken
xyz
200 OK
{
  "id": "1",
  "title": "this post"
}