如何更改 djoser 发送的电子邮件中链接使用的域?
我想通了,要更改链接域,您需要将 DOMAIN 和 SITE_NAME 添加到您的项目设置中。例:
DOMAIN = config('DOMAIN') #example.com
SITE_NAME = config('SITE_NAME') #Example
DJOSER = {
'LOGIN_FIELD':'email',
'USER_CREATE_PASSWORD_RETYPE':True,
'ACTIVATION_URL': '/users/activate/{uid}/{token}',
'SEND_ACTIVATION_EMAIL': True,
'SERIALIZERS':{
'user_create':'userauth.serializers.UserCreateSerializer',
'user':'userauth.serializers.UserCreateSerializer',
'activation': 'djoser.email.ActivationEmail',
}
然后,您应该在电子邮件中获得下一个链接:
http://example.com/auth/users/activate/MQ/5c9-26bcab9e85e8a967731d
电子邮件模板中的 {{ 协议 }} 变量来自templated_mail库,
protocol = context.get('protocol') or (
'https' if self.request.is_secure() else 'http'
)
因此,使用HTTPS请求在生产服务器协议上将是HTTPS
如前所述,对于"domain"和"site_name",可以用 settings.py 来定义:
DOMAIN = "example.com"
SITE_NAME = "Example"
但对于协议,有两种方法:
1-我没有测试它,但它应该可以工作,
在生产环境中,如果您添加设置:SECURE_SSL_REDIRECT=True,它将电子邮件中的默认协议从"http"更改为"https">
2-无论如何,您可以覆盖激活电子邮件(或其他电子邮件功能(以强制他们将协议从"http"更改为"https">
class ActivationEmail(BaseEmailMessage):
template_name = 'email/activation.html'
def get_context_data(self):
# ActivationEmail can be deleted
context = super().get_context_data()
user = context.get("user")
context["uid"] = utils.encode_uid(user.pk)
context["token"] = default_token_generator.make_token(user)
context["url"] = settings.ACTIVATION_URL.format(**context)
context["protocol"] = "https"
return context