authentication - Django rest with djoser 返回详细信息:首次登录时令牌无效
问题描述
我正在使用 Django rest 和 Djoser 包,在本地一切正常。
我使用用户名和密码登录token/login/
并获取令牌作为响应,但在 heroku 上我得到details:invalid token
响应,这意味着我什至无法获得令牌。
一些设置:
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 1000,
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.TokenAuthentication',
'rest_framework.authentication.SessionAuthentication',
],
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticated',
],
'DEFAULT_SCHEMA_CLASS': 'drf_spectacular.openapi.AutoSchema',
}
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'rest_framework.authtoken',
'sales',
'inventory',
'graphene_django',
'corsheaders',
'django_pivot',
'drf_spectacular',
'django_extensions',
'djoser',
]
urlpatterns = [
path('admin/', admin.site.urls),
path('login/', LoginView.as_view()), ## left from Session authentication
path('', include('sales.urls')),
path('inventory/', include('inventory.urls')),
path('graphql', csrf_exempt(GraphQLView.as_view(graphiql=True))),
path('', include('djoser.urls')),
path('', include('djoser.urls.authtoken')),
# swagger paths
path('api/schema/', SpectacularAPIView.as_view(), name='schema'),
path('api/schema/swagger-ui/',
SpectacularSwaggerView.as_view(url_name='schema'), name='swagger-ui'),
]
在前端:
axios.defaults.headers["Authorization"] = `Token ${localStorage.getItem("token")}`;
可能是什么问题?
解决方案
问题出在前端。
线
axios.defaults.headers["Authorization"] = `Token ${localStorage.getItem("token")}`;
发送一个请求标头Authorization: Token null
,后端将其解释为无效令牌。更好的标题将是Authorization: null
哪个有效。
所以是这样的:
axios.defaults.headers["Authorization"] = token ? `Token ${token} : null`
我个人使用过拦截器:
axios.interceptors.request.use(config => {
const token = localStorage.getItem("token");
config.headers.Authorization = token ? `Token ${token}` : null;
return config;
});
推荐阅读
- javascript - 如何使用js更改单个产品页面(woocommerce)的数量值
- javascript - 如何向此函数添加异步等待
- reactjs - 使用 history.push 将数据作为道具发送到其他组件
- visual-studio-code - 即使更新设置为“无”,VSC 也会继续更新
- python - pandas 数据帧对于并发读取操作是线程安全的吗?
- python - Python PandaSQL sqldf 没有这样的表错误,但是如果手动执行函数它将起作用
- python - *Python* 非递归函数和字符串
- python - 在python中设置imageio压缩级别
- python - 将列表中的项目附加到带有规则的 Pandas df
- javascript - Firefox Web 控制台 - 网络活动