/api-auth/login 的 ajaxing 时 djangorestfull 上的 CSRF 错误
CSRF error on djangorestfull while ajaxing for /api-auth/login
我在使用 djangorestfull
的 Web 项目的服务器端。我们的 UI 团队在端口 3000 上运行 UI 和 gulp 并且 Django
服务器在端口 8000 上运行。对于登录,我们使用 /api-auth/login
url 作为 ajax。来自 /api-auth/login
的选项方法的答案包含 csrftoken
和一个表单,但是 post 方法(包含用户名和密码)面临 CSRF
错误。我怎样才能检查这个问题的根源?它是在服务器端还是令牌不会使用 post 方法发送?
这是我的 setting.py
:
REQUIRED_APPS = [
'django_admin_bootstrapped',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django_extensions',
'rest_framework',
]
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
)
REST_FRAMEWORK = {
# Use Django's standard `django.contrib.auth` permissions,
# or allow read-only access for unauthenticated users.
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly',
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.TokenAuthentication',
]
}
和urls.py
:
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'', include('User.urls', namespace='User')),
url(r'^schedule/', include('Schedule.urls', namespace='Schedule')),
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
]
问题似乎来自 UI 团队。他们很有可能没有在 POST 请求中包含 CSRF 令牌。请确认。以下是 Django 中有关如何添加令牌的一些文档。 https://docs.djangoproject.com/en/1.9/ref/csrf/#ajax
我在使用 djangorestfull
的 Web 项目的服务器端。我们的 UI 团队在端口 3000 上运行 UI 和 gulp 并且 Django
服务器在端口 8000 上运行。对于登录,我们使用 /api-auth/login
url 作为 ajax。来自 /api-auth/login
的选项方法的答案包含 csrftoken
和一个表单,但是 post 方法(包含用户名和密码)面临 CSRF
错误。我怎样才能检查这个问题的根源?它是在服务器端还是令牌不会使用 post 方法发送?
这是我的 setting.py
:
REQUIRED_APPS = [
'django_admin_bootstrapped',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django_extensions',
'rest_framework',
]
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
)
REST_FRAMEWORK = {
# Use Django's standard `django.contrib.auth` permissions,
# or allow read-only access for unauthenticated users.
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly',
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.TokenAuthentication',
]
}
和urls.py
:
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'', include('User.urls', namespace='User')),
url(r'^schedule/', include('Schedule.urls', namespace='Schedule')),
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
]
问题似乎来自 UI 团队。他们很有可能没有在 POST 请求中包含 CSRF 令牌。请确认。以下是 Django 中有关如何添加令牌的一些文档。 https://docs.djangoproject.com/en/1.9/ref/csrf/#ajax