Django密码重置生成http链接而不是https

Posted

技术标签:

【中文标题】Django密码重置生成http链接而不是https【英文标题】:Django Password Reset generating http link instead of https 【发布时间】:2019-05-29 09:19:24 【问题描述】:

我正在使用 Django 的内置密码重置机制。它会发送一封电子邮件,其中包含一个包含令牌的链接,单击该令牌可用于重置密码。但是,正在生成的链接正在使用模板:

% trans "Please go to the following page and choose a new password:" %
% block reset_link %
 protocol :// domain % url 'password_reset_confirm' uidb64=uid token=token %
% endblock %

这里, protocol 返回的是 http 而不是 https。 我的 nginx 服务器会将任何 http 请求重定向到 https 基本链接(主页)。

因此,密码重置链接不起作用,因为生成的链接错误。它只是通过 nginx 进入主页。

我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

这可能是您的 nginx 配置中 X-Forwarded-Protocol 的问题。

您需要将其添加到您的位置块中:

proxy_redirect off;
proxy_set_header X-Forwarded-Proto $scheme;

欲了解更多信息,请参阅:https://djangodeployment.com/2017/01/24/fix-djangos-https-redirects-nginx/

【讨论】:

以上是关于Django密码重置生成http链接而不是https的主要内容,如果未能解决你的问题,请参考以下文章

在使用 Django 框架构建的博客 Web 应用程序中单击重置密码时,我没有收到密码重置电子邮件链接

如果在 django 中重置密码电子邮件链接错误,则找不到页面(404)错误

NoReverseMatch:在 Django 注册中的密码重置表单中?

以 html 帖子形式存储重置密码令牌是不是安全?

如何自定义 django rest auth 密码重置电子邮件内容/模板

Django从零搭建个人博客 | 使用allauth插件管理用户登录与注册