【问题标题】:Django Rest Framework Session + Token Auth issueDjango Rest Framework Session + Token Auth 问题
【发布时间】:2018-07-31 22:39:21
【问题描述】:

您好,所有帮助像我这样的菜鸟的优秀专家!

这次在我的 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
}

【问题讨论】:

    标签: python-3.x oauth-2.0 django-rest-framework swagger-ui django-2.0


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2019-06-07
      • 2016-07-08
      • 2019-06-26
      • 1970-01-01
      • 1970-01-01
      • 2017-04-30
      • 1970-01-01
      • 2018-07-13
      • 2017-08-19
      相关资源
      最近更新 更多