跳转到主要内容

无密码认证:通过点击收到的电子邮件中的魔法链接进行登录。

项目描述

Django Magicauth

Django Magicauth将为您的项目带来无密码认证。

工作原理

  • 用户输入他们的电子邮件地址(可选的OTP)。
  • 向用户发送一封包含一次性令牌的链接的电子邮件。
  • 他们点击此链接后,即可登录到服务。

有关默认模板的详细步骤和截图,请参阅图片中的步骤

工作原理(法文)

使用 Django Magicauth 无密码验证您的用户。

工作原理

  • 用户填写他们的电子邮件地址(以及可选的一次性密码 OTP)。
  • 随后,他们将收到一封包含连接链接的电子邮件。
  • 点击链接后,他们将被验证并重定向到服务。

要查看详细的图像说明,请参阅 图像流程

安装和测试说明

快速入门

  1. 安装 Magicauth
pip install git+https://github.com/betagouv/django-magicauth.git
  1. 将 "magicauth" 添加到您的 settings.py 中的 INSTALLED_APPS
INSTALLED_APPS = [
    # all your apps
    "magicauth",
]
  1. 在您的应用的 url.py 中包含 magicauth URLconf。
# After your previous imports
from magicauth import views as magicauth_views
from magicauth.urls import urlpatterns as magicauth_urls

urlpatterns = [
    # here are your URL patterns
]

urlpatterns.extend(magicauth_urls)
  1. 在您的项目的 settings.py 中添加以下项:
MAGICAUTH_FROM_EMAIL = 'contact@mysite.com'
MAGICAUTH_LOGGED_IN_REDIRECT_URL_NAME = 'home'
  1. 运行 python manage.py migrate 以创建投票模型。

  2. settings.py 中设置您的 邮件发送器。在开发模式下,您可以使用 控制台邮件发送器

  3. 确保您有以下中间件

MIDDLEWARE = [
    # [...] other middleware you may have
    "django.contrib.sessions.middleware.SessionMiddleware",
    "django.contrib.messages.middleware.MessageMiddleware",
    "django.contrib.auth.middleware.AuthenticationMiddleware",
    "django.contrib.sites.middleware.CurrentSiteMiddleware",
]

使用一次性密码 (OTP) 的双因素认证 (2FA)

双因素认证意味着您会从用户那里请求两个不同的密码:他们的正常密码和一个 OTP。(见 https://en.wikipedia.org/wiki/Multi-factor_authentication)只有当两个都是有效的时,他们才能获得魔法链接,否则他们将收到错误信息,链接不会发送。

什么是 OTP?它是一个短代码(6 到 8 位数字),通常由用户设备上的专用应用程序(智能手机、硬件)生成。见 https://en.wikipedia.org/wiki/Time-based_One-time_Password_algorithm

如何启用 OTP

我们使用 django-otp 包。您必须在项目中安装并配置它。

  1. 安装 django_otp:pip install django_otp(或您使用的任何包管理器)
  2. INSTALLED_APPS 中添加所需的应用:'django_otp''django_otp.plugins.otp_totp'
  3. 在您的项目中运行迁移:python manage.py migrate
  4. 在您的 settings.py 中设置 MAGICAUTH_ENABLE_2FA = True

如果您使用默认的登录模板,OTP 输入框将显示在电子邮件下方(在登录页面中)。(要检查安装是否成功,您可以恢复到默认模板并查看字段是否出现:删除您的 MAGICAUTH_LOGIN_VIEW_TEMPLATE 变量。)

如果您有自定义登录模板,您必须在 OTP_form 中添加输入 OTP 的字段。请参阅默认登录模板的示例:templates/magicauth/login.html

出于测试目的,您可以从命令行为特定用户生成 OTP

  • 将 'django_otp.plugins.otp_static' 添加到 INSTALLED_APPS
  • 然后您可以使用 addstatictoken 从命令行使用。例如: python manage.py addstatictoken -t 123456 "thierry@coucou.fr"

为 Magicauth 做贡献

要为 Magicauth 做贡献,您可以在 "editable" 模式下安装包

pip uninstall django-magicauth  # just in case...
pip install -e git+https://github.com/betagouv/django-magicauth.git#egg=django-magicauth

您还可以安装特定的分支,例如用于测试一个 PR。要安装 my-branch 分支

pip install -e git+https://github.com/betagouv/django-magicauth.git@my-branch#egg=django-magicauth

Django-magicauth 现在是您项目的依赖项,您可以在此处编辑代码

cd src/django-magicauth

运行测试

为项目创建一个虚拟环境或重用现有环境并使用它。

安装依赖项并运行 tox

cd src/django-magicauth
pip install -r requirements.txt
tox

发布流程

以下依赖项需要安装:pip setuptools wheel twine

python -m pip install --upgrade pip setuptools wheel twine
  1. docs/releases 下创建一个名为新版本的 MD 文件并填写更改
  2. setup.py 中更改版本
  3. 创建一个名为 发布版本 的提交
  4. 打开并合并该发布版本的 PR
  5. https://github.com/betagouv/django-magicauth/releases/new 创建新版本
  6. 在新 PyPI 上发布新版本
     python setup.py sdist bdist_wheel
     twine upload dist/*
    

使用 Magicauth 的项目

https://github.com/betagouv/e-controle/ https://github.com/betagouv/Aidants_Connect https://github.com/betagouv/peps https://github.com/betagouv/urbanvitaliz-django

加入我们!

图文步骤

注意:以下截图使用默认模板,外观不太美观。建议您替换为更美观的模板。

步骤 1:用户访问登录页面。(见 LoginViewmagicauth/views.py

步骤 2:用户在登录页面输入他们的电子邮件地址。

步骤 3:用户看到确认页面(EmailSentView),说明已发送电子邮件。

向用户发送一封包含一次性令牌的链接的电子邮件。

链接看起来像这样

步骤 4:一旦点击按钮并跟随链接,用户将被引导到等待页面(这是可选的)(WaitView

步骤 5:用户登录到服务(ValidateTokenView)并被重定向到登录页面。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源代码分发

django-magicauth-1.0.2.tar.gz (20.7 kB 查看哈希值)

上传时间 源代码

构建分发

django_magicauth-1.0.2-py3-none-any.whl (27.6 kB 查看哈希值)

上传时间 Python 3

支持者