TLDR:登录后如何以及在哪里获取用户的令牌,并将其作为标头传递给所有后续使用 Django/Djoser 的受限 URL?
我正在尝试使用 Djoser 创建用户登录/注册。在登录后的后端,我得到了身份验证令牌,但是当我尝试访问任何其他页面(例如 /users/me)时,它说:
{
"detail": "Authentication credentials were not provided."
}
我在网上查看,到处都说我需要在标题中传递身份验证令牌,但我看到的所有示例都使用 Postman 或 curl,他们只是将令牌复制并粘贴到标题部分。但我想在不知道令牌的情况下使用 Django 来完成它。
我已经看到使用token = request.META['HTTP_AUTHORIZATION']
它来获取令牌,但我不确定将它放在哪里,因为我所拥有的只是
urlpatterns = [
path('', include('djoser.urls')),
path('', include('djoser.urls.authtoken')),
]
在我的 urls.py 文件中,它应该为我处理所有事情,所以我的 views.py 或 models.py 中没有任何内容
然后将令牌值作为标头传递,我已经看到使用 Python requests 包:
import requests
response = requests.get('https://website.com/id', headers={'Authorization': 'access_token myToken'})
但是再一次不知道该放在哪里。
在我的 settings.py 中,我有:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'api.apps.ApiConfig',
'rest_framework',
'rest_framework.authtoken',
'frontend.apps.FrontendConfig',
'register',
'djoser',
]
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.TokenAuthentication',
],
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
),
}
DJOSER = {
'LOGIN_FIELD': 'username',
'USER_CREATE_PASSWORD_RETYPE': True,
'SERIALIZERS': {
'user_create': 'register.serializers.UserCreateSerializer',
'user': 'register.serializers.UserCreateSerializer',
}
}
我也尝试过使用基本身份验证,但由于某种原因我永远无法注销。我要问的甚至可以从后端做吗?还是必须从客户端处理?如果是这样,我正在使用 Reactjs,但仍然不确定如何去做。