我刚刚更改为远程服务器的新域,该域已经通过Django Rest Framework(2.4.x)提供JSON。
在更改之前,它可以顺利地对用户进行身份验证。但是,在切换之后,它现在抛出了标题中提到的错误。
感觉像CSRF的东西,但我不知道要修复什么,或者在哪里侦探。
指针?
修改:
回溯:
Traceback (most recent call last):
File ".../project_path/project_name/urls.py", line 584, in list
related_field = self.request.user.relatedfield
AttributeError: 'AnonymousUser' object has no attribute 'relatedfield'
DRF设置:
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': (
'rest_framework.renderers.JSONRenderer',
),
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
),
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.BasicAuthentication',
'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
),
'DEFAULT_FILTER_BACKENDS': (
'rest_framework.filters.DjangoFilterBackend',
),
'PAGINATE_BY': 10, # Default to 10
'PAGINATE_BY_PARAM': 'page_size', # Allow client to override, using `?page_size=xxx`.
'MAX_PAGINATE_BY': 999 # Maximum limit allowed when using `?page_size=xxx`.
}
答案 0 :(得分:1)
我认为,由于您是从其他域发出请求,因此身份验证无法正常运行。
由于您使用SessionAuthentication
,因此强制使用CSRF token
,CSRF检查的全部目的是避免跨网站请求伪造。
答案 1 :(得分:1)
此库有助于跨网站域请求django-cors-headers
。 cors-headers应用会将Cross-Origin Resource Sharing headers
添加到回复中。阅读CORS
机制。
CORS_ALLOW_HEADERS:指定在发出实际请求时可以使用哪些非标准HTTP标头
INSTALLED_APPS = (
...
'corsheaders',
...
)
MIDDLEWARE_CLASSES = (
...
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
...
)
CORS_ALLOW_HEADERS = (
'x-requested-with',
'content-type',
'accept',
'origin',
'authorization',
'x-csrftoken'
)