大家好,再次帮助像我这样的新手!
这次在我的DRF api中我使用令牌身份验证,但在我升级到django2和python3之前,会话身份验证至少从我的计算机到我的服务器工作。现在,如果我在开发期间在本地主机上运行它,并且我在/ admin(django admin)登录我的管理面板,那么转到/ docs(swagger UI)我只能看到不需要登录的URL。但是,正确设置了csrf令牌和会话,但django无法识别用户。是因为它是localhost吗?我有同样的问题得到双因素的会话所以我黑了它所以我不需要它,但我想知道我是否应该测试它在测试环境下推送到我的生产服务器或者你能看到我可能有一个我的设置中的愚蠢错误?此外,如果还有其他任何你想看的东西,请告诉我,我会发布它。非常感谢!
**编辑**我的管理员面板自动登录并正确地从会话中获取用户。
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.IsAdminUser',),
'PAGE_SIZE': 20,
'DEFAULT_AUTHENTICATION_CLASSES': (
'oauth2_provider.contrib.rest_framework.OAuth2Authentication',
'rest_framework.authentication.SessionAuthentication',
),
'DEFAULT_RENDERER_CLASSES': (
'rest_framework.renderers.JSONRenderer',
)
}
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'mysite.middleware.AnonymousAccessMiddleware',
'django_otp.middleware.OTPMiddleware',
]
SWAGGER_SETTINGS = {
"exclude_namespaces": [], # List URL namespaces to ignore
'USE_SESSION_AUTH': True,
"api_version": '0.1', # Specify your API's version
"api_path": "/", # Specify the path to your API not a root level
"enabled_methods": [ # Specify which methods to enable in Swagger UI
'get',
'post',
'put',
'patch',
'delete'
],
"api_key": 'my token', # An API key
"is_authenticated": True, # Set to True to enforce user authentication,
"is_superuser": True, # Set to True to enforce admin only access
}
事实证明。它不是中间件,是在mixin检查登录时,当你通过中间件运行代码来验证令牌时,用户会丢弃它,然后根据令牌对其进行授权。因此,我没有修改oAuth提供程序,而只是将其留下,因此它只接受令牌,然后我创建了自己的双因素系统。