1

再次您好所有出色的专家帮助像我这样的菜鸟!

这次在我的 DRF api 中,我使用了令牌身份验证,但在升级到 django2 和 python3 之前,会话身份验证至少从我的计算机到我的服务器都可以正常工作。现在,如果我在开发期间在本地主机上运行它并在 /admin(django admin) 登录到我的管理面板,然后转到 /docs(swagger UI),我只能看到不需要登录的 URL。但是,csrf 令牌和会话已正确设置,但 django 无法识别用户。是因为它是本地主机吗?我在获取两个因素的会话时遇到了同样的问题,所以我破解了它,所以我不需要它,但我想知道是否应该在测试环境下测试它推送到我的生产服务器,或者你能看到我有一个我的设置中的愚蠢错误?另外,如果您还有什么想看的,请告诉我,我会发布的。非常感谢!

** 编辑 ** 我的管理面板自动登录并正确地从会话中获取用户。


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
}
4

1 回答 1

0

事实证明。这不是中间件,而是检查登录的混入,当您通过中间件运行代码以验证令牌时,它会获取用户并丢弃它,然后根据令牌对其进行授权。因此,我没有修改 oAuth 提供程序,而是将其保留,因此它只接受令牌,然后我创建了自己的双因素系统。

于 2018-05-22T12:16:50.637 回答