Django-Rest-Auth 身份验证问题

Django-Rest-Auth authentication issue

我使用 Django Rest Framework 创建了 REST API,并将 django-rest-auth 用于身份验证端点。这些 API 用于移动应用程序。我使用 TokenAuthentication 来保护 API.

REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
    'rest_framework.authentication.TokenAuthentication',
),
'DEFAULT_PERMISSION_CLASSES': (
    'rest_framework.permissions.IsAuthenticated',
)
}

使用 APIDOC 时出现问题。我使用 coreapi 添加了 apidoc。文档也需要保护。当我使用上述设置访问 /docs/ 时出现以下错误:

'dict' object has no attribute 'data'

所以我启用了 SessionAuthentication。

REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
    'rest_framework.authentication.TokenAuthentication',
    'rest_framework.authentication.SessionAuthentication',
),
'DEFAULT_PERMISSION_CLASSES': (
    'rest_framework.permissions.IsAuthenticated',
)
}

这导致登录端点 (/rest-auth/login) 因 CSRF 错误而中断。

{
    "detail": "CSRF Failed: CSRF token missing or incorrect."
}

那么,我该如何保护仅使用 TokenAuth 的端点和使用 SessionAuth 的文档呢?或者我可以完全绕过登录端点的安全性吗?

身份验证 类 可以在定义 URL 时单独定义:

url(r'^docs/', include_docs_urls(title='PeySO API Doc', public=False,
                                 authentication_classes=[SessionAuthentication])),

这允许我们仅为文档启用 SessionAuthentication,并为 API 端点使用 TokenAuthentication。