Django all auth:如何覆盖确认电子邮件的URL

6

我想要做的是在 templates/account/email/email_confirmation_message.txt 中覆盖确认邮件的网址。

我想要改变这个部分

To confirm this is correct, go to {{ activate_url }}

翻译成类似于下面这样的内容

http://localhost:8080/confirm_email/{{ key }}

然而,我无法确定{{ activate_url }}来自哪里。 我想将key发送到由rest-auth创建的端点。

我该如何重写电子邮件中的url链接?或者如果太复杂了,有什么简单的方法可以在前端验证电子邮件?


@dirkgroten 对不起,我误解了一些事情。key是验证电子邮件所需的内容。请查看源代码。我正在使用Django作为rest API。因此,我不想使用默认的url{{ activate_url }}的部分是key - Ooto
“key”也是传递给模板的上下文变量。只需编写自己的模板即可。 - dirkgroten
@dirkgroten email_confirmation_message.txt 没有提到 key{{ activate_url }} 部分是 key - Ooto
好的,它在上下文中,所以你可以使用它。查看allauth/account/adapter.py中的send_confirmation_mail()方法。这允许您在模板中添加类似于“如果上面的链接不起作用,请转到mysite.com/confirm-email并在那里插入此密钥”的内容,呈现一个额外的表单,他们可以在其中粘贴密钥。 - dirkgroten
@dirkgroten 我可以再问你一个问题吗?在 adapter.py 中,模板被引用为 email_template = 'account/email/email_confirmation' 但是并没有这个模板。email_confirmation_message.txt 在哪里使用了? - Ooto
显示剩余3条评论
2个回答

6

该模板使用包含user, current_site, activate_urlkey的上下文进行渲染(请参阅allauth/account/adapter.py中的send_confirmation_mail()方法)。

因此,您可以覆盖该模板并使用key(可能还要使用current_site来创建绝对URI)在模板中创建URL。


如何将HTTP转换为HTTPS? - giveJob
@HemanthSP 这取决于你正在做什么。activate_url 使用与当前处理的 request 相同的方案(例如用户注册),因此它应该自动为 https(如果您用于用户注册)。如果您在模板中自己构建 URL,请根据 debug 是否为 true 硬编码 httpshttp - dirkgroten
@giveJob 这个你可以使用所有的 allauth 设置 ACCOUNT_DEFAULT_HTTP_PROTOCOL = 'https' - callmebob

4
要解决这个问题,您可能只需要覆盖send_email函数。
from allauth.account.adapter import DefaultAccountAdapter
from django.conf import settings

class CustomAllauthAdapter(DefaultAccountAdapter):
    def send_mail(self, template_prefix, email, context):
    account_confirm_email = '/api/v1/auth/register/account-confirm-email/'
    context['activate_url'] = (
        settings.BASE_URL + account_confirm_email + context['key']
    )
    msg = self.render_mail(template_prefix, email, context)
    msg.send()

我应该把这个放在文件的哪个位置,以及文件系统中的哪个位置? - Ryan Fleck
1
在settings.py文件中,您可以将此用作默认的电子邮件后端适配器。 - Tony Aziz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接