我有一个安卓客户端应用程序,试图通过Django + DRF后端进行身份验证。但是,当我尝试登录时,我收到以下响应:
403: CSRF Failed: CSRF token missing or incorrect.
该请求被发送到 http://localhost/rest-auth/google/
并带有以下内容:
access_token: <the OAuth token from Google>
可能是什么原因导致这个问题?由于POST身份验证是客户端和服务器之间发生的第一件事,因此客户端没有CSRF令牌。我查看了很多遇到相同问题的旧问题,但是找不到任何解决方案。
Django端的相关设置如下:
AUTHENTICATION_BACKENDS = (
"django.contrib.auth.backends.ModelBackend",
"allauth.account.auth_backends.AuthenticationBackend"
)
TEMPLATE_CONTEXT_PROCESSORS = (
"django.core.context_processors.request",
"django.contrib.auth.context_processors.auth",
"allauth.account.context_processors.account",
"allauth.socialaccount.context_processors.socialaccount"
)
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
)
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'app',
'allauth',
'allauth.account',
'allauth.socialaccount',
'allauth.socialaccount.providers.facebook',
'allauth.socialaccount.providers.google',
'django.contrib.admin',
# REST framework
'rest_framework',
'rest_framework.authtoken',
'rest_auth',
'rest_auth.registration',
)
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated'
),
}
rest-auth/login/
端点登录时出现问题。但这是客户端和服务器之间的第一次联系,所以客户端不知道令牌。 - BenSessionAuthentication
需要发送CSRF令牌。你需要在设置或特定视图中明确定义该特定的身份验证类。 - Rahul Gupta