Django allauth没有发送与https的链接

fer*_*ngb 4 django https django-allauth

我希望Django Allauth发送确认电子邮件或重置密码等链接https:

像这样的东西:

https://example.com/ca/accounts/confirm-email/picuwfpjpptjswi50x5zb4gtsqptmwkscea445kadnbsfwcyij3fdnblery4onuq/

根据官方文档,只更改其中的以下设置settings.py应该有效:

ACCOUNT_DEFAULT_HTTP_PROTOCOL = "https"
Run Code Online (Sandbox Code Playgroud)

但我继续得到链接,http而不是https像这样:

http://example.com/ca/accounts/confirm-email/picuwfpjpptjswi50x5zb4gtsqptmwkscea445kadnbsfwcyij3fdnblery4onuq/

我错过了什么吗?谢谢!

Tim*_*ony 5

深入研究一下代码,您可以看到使用Django的build in 方法allauth设置activate_url模板上下文变量build_absolute_uri:

https://github.com/pennersr/django-allauth/blob/master/allauth/account/models.py#L119

...
activate_url = reverse("account_confirm_email", args=[self.key])
activate_url = request.build_absolute_uri(activate_url)
ctx = {
"activate_url": activate_url,
...
}
Run Code Online (Sandbox Code Playgroud)

查看代码,build_absolute_uri您可以看到它需要一个环境变量:

https://github.com/django/django/blob/master/django/http/request.py#L153

def _get_scheme(self):
    return 'https' if os.environ.get("HTTPS") == "on" else 'http'
Run Code Online (Sandbox Code Playgroud)

要返回https://此函数生成的URL,您需要设置一个HTTPS环境变量.

这取决于您如何设置项目,但您可以在或中设置环境变量settings.pymanage.py

以下是关于SSL的一般Django安全性的好帖子:

编辑

奇怪的是,重置密码模板使用不同的方法来构建URL:

https://github.com/pennersr/django-allauth/blob/master/allauth/account/forms.py#L428

url = '%s://%s%s' % (app_settings.DEFAULT_HTTP_PROTOCOL,
    current_site.domain,
    path)
context = {"site": current_site,
    "user": user,
    "password_reset_url": url}
Run Code Online (Sandbox Code Playgroud)

DEFAULT_HTTP_PROTOCOL改为使用设置