Django 集成
Cookie 认证 + CSRF
Django 通过要求请求中带有 'X-CSRFToken' 请求头来防御跨站请求伪造。
此外,Django 的认证使用 cookies,因此我们需要发送凭据(fetch credentials)。如果你使用的认证方式不是默认的 'django.contrib.auth',请参阅认证指南获取更多示例。
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 });
请求
GET /my/1
content-type: application/json
cookie: session=abc;
x-csrftoken: xyz
响应200 OK
{
"id": "1",
"title": "this post"
}