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/
我错过了什么吗?谢谢!
深入研究一下代码,您可以看到使用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改为使用设置
| 归档时间: |
|
| 查看次数: |
1226 次 |
| 最近记录: |