我目前正致力于在django项目中实现双因素身份验证。目前看来,django-duo-auth是这方面最好的包。我安装了这个包,并查看了他们的自述文件的基本说明:
https://github.com/Elemnir/django-duo-auth/blob/master/README.rst
然而,这导致我的项目不断地重定向到一个不存在的子目录'duo‘,这就是我命名的路径。例如,我的应用程序在XX.XX.XX.XX:YYYY
中加载到url自动重定向页面到:http://XX.XX.XX.XX:YYYY/duo/login/?next=/
或者,XX.XX.XX.XX:YYYY/admin
自动重定向到:http://XX.XX.XX.XX:YYYY/duo/login/?next=/admin
这只会导致django的通用base.html ( duo_auth_form.html
扩展)
下面是一些相关代码的片段,尽管它与包的自述建议没有太大区别。
/urls.py
urlpatterns = [
...
path('admin/', admin.site.urls),
path('duo/', include('duo_auth.urls')),
]
/settings.py
INSTALLED_APPS = [
...
'duo_auth',
]
MIDDLEWARE = [
...
'duo_auth.middleware.DuoAuthMiddleware',
]
DUO_CONFIG = {
'DEFAULT': {
'HOST': '<api-host-url>',
'IKEY': '<integration_key>',
'AKEY': '<app_secret_key>',
'SKEY': '<secret_key>',
'FIRST_STAGE_BACKENDS': [
'django.contrib.auth.backends.ModelBackend',
]
}
}
与read相比,惟一的区别是在示例do_auth_form.html
中稍微重定向,其中扩展到模板的子目录,即文件顶部的{% extends "dir\base.html" %}
。
似乎这个包是相当新的,没有太多的论坛为问题,所以我认为这将是最好的要求这里。任何帮助都将不胜感激!
发布于 2021-11-09 13:38:00
我相信这实际上是django-duo-auth
包按预期工作。中间件的工作方式是,在将其添加到您的项目之后,将检查使用其中一个FIRST_STAGE_BACKENDS
进行身份验证的任何经过身份验证的用户,以查看他们是否也使用了Duo进行身份验证,如果没有,他们将被重定向到duo/login/
的Duo登录页面,并提示他们完成双重身份验证,类似于Django的内置@login_required
装饰器如何将匿名用户重定向到accounts/login/
以登录。
如果您的用户不想强制执行第二个因素,我建议创建一个只为这些用户进行身份验证的ModelBackend
子类。类似于本问题中描述的方法,但反转逻辑:
https://stackoverflow.com/questions/66179978
复制相似问题