我有一个工作的 django 网站 - 正常运行,工作得很好。它使用 Django 的 contrib.auth 进行身份验证。它托管在 Heroku 上。我想为演示目的设置此站点的克隆,但想在站点周围添加一个额外的安全层,这将是一个非常简单的密码保护。不必是防弹或不可破解的 - 足以让“麻瓜”尝试。
此授权层不应以任何方式干扰站点身份验证本身。它只是一个外环(检查一次,在会话中存储访问权限)。因为该站点托管在 Heroku 上,所以我无法在 Web 服务器级别执行此操作 - 它必须是应用程序本身的一部分。
我的核选项是创建一个 django 应用程序(工作名称“周边”)来强制执行此操作,但如果有人知道另一种方法来做到这一点,我将不胜感激。
核心功能包括:
- 一些生成短令牌的机制(< 8 个字符)
- 针对电子邮件地址记录令牌的一些机制
- 在首次访问网站时提示用户输入令牌/电子邮件组合
- 此后不受限制地访问站点(标准身份验证模型在此时启动)
典型的用户旅程是:
- Bob 要求网站所有者(我)访问演示网站
- 我为 Bob 生成了一个令牌并将其与站点 URL 一起发送给他
- Bob 点击链接,被重定向到页面以输入他的电子邮件和令牌
- 如果令牌有效(在 X 小时/天后过期),则存储在会话中,让 Bob 进入。
- 如果令牌无效,则为 403 (/401)。
(您可能想知道为什么保护已经公开的网站副本有意义。这是因为该网站是仅限会员的网站,并且在演示版中它将是“自动注册”,以便人们可以看到它的样子在网站内部而无法访问真实数据。但是,我希望能够在其上跟踪用户。)
[更新:替代]
一个直截了当的替代方法是将令牌添加到我发送给 Bob 的 URL,忽略他的电子邮件,并简单地验证令牌本身。只要 Bob 始终使用电子邮件中的 URL,这将起作用。