首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django 2FA在本地工作,但在服务器上失败(静默)。

Django 2FA在本地工作,但在服务器上失败(静默)。
EN

Stack Overflow用户
提问于 2021-04-11 11:18:41
回答 1查看 261关注 0票数 1

问题

我需要为Django项目实现双因素身份验证。我使用的是Django双因素认证,它在本地工作得很好,包括Google和我们的短信网关。当我将应用程序发布到测试服务器时,会出现此问题。登录工作正常,但当我填写令牌时,它将简单地将我重定向回初始登录步骤,以再次填写我的凭据。它不会在UI中给出任何错误消息,据我所见,日志中也没有任何错误消息。

不知道它是否相关,但该应用程序是作为一个码头群服务在服务器上运行。

我试过的

由于缺乏对2FA库和OTP库的反馈和知识,我真的不知道从哪里开始。我很确定我的本地机器和测试环境之间的设置一样好。包的版本是相同的。我甚至确保我的机器和服务器之间的时间和时区是相同的。

查看OTP库表中的数据库,失败计数为0,每次我尝试登录时,last_t都在增加。这告诉我,按照Django-OTP文档,令牌本身是经过验证的:

BigIntegerField:上一次验证令牌的时间步骤。为了避免对相同的令牌进行两次验证,将对每个成功的验证进行更新。随后将只在较高的时间步骤验证令牌。(失责:-1)

任何建议都是非常感谢的。我知道我没有提供很多关于我的具体实现的具体细节,但我希望有人能对问题可能是什么有一些大致的了解。不管怎样,如果你需要更具体的东西,请告诉我。

谢谢,

纽结

编辑1

我错了,日志里有我以前没看过的东西:

代码语言:javascript
复制
Requested step 'token' is no longer valid, returning to last valid step in the wizard.

因此,这可能表明我有一些漂移,导致令牌无效?

版本是

  • Django 2.2.20
  • django-otp 1.0.3
  • django-双因素-auth 1.13.1

我会尽量把相关的代码

我的settings.py被划分为每个settings.base.py的环境设置。2FA的所有相关代码都在settings.base.py中:

代码语言:javascript
复制
ISTALLED_APPS = [
    ...
    'django_otp',
    'django_otp.plugins.otp_static',
    'django_otp.plugins.otp_totp',
    'two_factor'
]

MIDDLEWARE = [
    ...
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django_otp.middleware.OTPMiddleware',
    ...
]

LOGIN_URL = 'two_factor:login'

# Not sure if these are relevant
TIME_ZONE = 'Europe/Oslo'

USE_I18N = True

USE_L10N = True

USE_TZ = True

这基本上是我为使它在我的机器上在本地工作而添加的全部内容。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-12 17:56:27

在我的更新中发现了日志行,给了我一些谷歌的东西,我发现了以下内容:https://github.com/Bouke/django-two-factor-auth/issues/65#issuecomment-57931565

所以,浏览器会请求favicon.ico,它没有列在我的登录豁免urls中,所以请求被重定向到登录页面,该页面使实际屏幕上的初始登录无效。

不知道为什么不发生在本地,但是可能是因为开发服务器.不管怎样,它现在起作用了!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67044346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档