Django 2FA 在本地工作但在服务器上失败静默

问题描述

问题

我需要为 Django 项目实现两因素身份验证。我正在使用 Django Two-Factor Authentication,它在本地使用 Google 身份验证器和我们的 SMS 网关都可以正常工作。当我将应用程序发布到测试服务器时会出现此问题。登录正常工作,但是当我填写令牌时,它只会将我重定向回初始登录步骤以再次填写我的凭据。它没有在 UI 中给我任何错误消息,据我所知,日志中也没有。

不知道是否相关,但该应用在服务器上作为 Docker Swarm 服务运行。

我尝试了什么

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

查看 OTP 库表中的数据库,失败计数为 0,每次尝试登录> mydata # A tibble: 6 x 5 # Groups: Region [3] date Region Number `Total Population` `Ratio of Total` <dbl> <chr> <dbl> <dbl> <chr> 1 2020 Sicilia 20 50 40.0% 2 2021 Sicilia 30 50 60.0% 3 2020 Sardegna 50 120 41.7% 4 2021 Sardegna 70 120 58.3% 5 2020 Campania 90 159 56.6% 6 2021 Campania 69 159 43.4% 都会递增。这告诉我令牌本身已验证,根据 Django- OTP 文档:

BigIntegerField:最后验证令牌的时间步长。避免 两次验证相同的令牌,这将在每次更新 验证成功。只有在更高时间步长的令牌才会被 随后核实。 (认:-1)


非常感谢任何建议。我知道我没有提供我的确切实现的太多具体细节,但我希望有人可能对问题可能有一些大致的了解。无论如何,如果您需要更具体的东西,请告诉我。

谢谢,

尼克诺

编辑 1

我错了,实际上日志中有一些我以前没有看到的内容

last_t

所以也许这可以表明我有一些漂移导致令牌无效?

版本是

  • Django 2.2.20
  • django-otp 1.0.3
  • django-two-factor-auth 1.13.1

我会尝试包含相关代码

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

Requested step 'token' is no longer valid,returning to last valid step in the wizard.

这基本上就是我为了让它在我的机器上本地工作而添加的所有内容

解决方法

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

所以发生的情况是浏览器要求 favicon.ico 没有在我的登录豁免 URL 中列出,因此请求被重定向到登录页面,这使实际屏幕上的初始登录无效。

不知道为什么这没有发生在本地,但可能是开发服务器的问题......无论如何它现在可以工作了!