【问题标题】:(Djoser) Weird activation email when I update the user fields(Djoser) 更新用户字段时出现奇怪的激活电子邮件
【发布时间】:2021-05-12 16:55:05
【问题描述】:

每次我尝试使用 PATCH 方法更新我的用户到 /users/me/ 端点,始终发送激活电子邮件。用户已经在系统中处于活动状态......所以我不知道发生了什么。

SEND_ACTIVATION_EMAIL 为 True,但我了解电子邮件仅在以下情况下才会发送: 创建帐户 或更新他们的电子邮件(我不更新电子邮件)

DJOSER = {
    ....
    'ACTIVATION_URL': 'auth/users/activation/{uid}/{token}',
    'SEND_ACTIVATION_EMAIL': True,
    ....
}

【问题讨论】:

标签: python django djoser


【解决方案1】:

我也有同样的问题。这是由于djoser.views.UserViewSet.perform_update 方法造成的。

    def perform_update(self, serializer):
    super().perform_update(serializer)
    user = serializer.instance
    #should we send activation email after update?
    if settings.SEND_ACTIVATION_EMAIL:
        context = {"user": user}
        to = [get_user_email(user)]
        settings.EMAIL.activation(self.request, context).send(to)

如您所见,即使您使用电子邮件作为登录字段,如果您更新任何字段,您也会不断收到电子邮件确认。这不是正确的做法。仅当电子邮件已更改时才应执行此操作。

在您的情况下,应该省略更新部分:

#user = serializer.instance
#should we send activation email after update?    
#if settings.SEND_ACTIVATION_EMAIL:
        #context = {"user": user}
        #to = [get_user_email(user)]
        #settings.EMAIL.activation(self.request, context).send(to)

【讨论】:

    猜你喜欢
    • 2018-04-19
    • 2021-04-19
    • 2020-12-05
    • 2021-05-13
    • 2012-04-27
    • 2011-11-25
    • 1970-01-01
    • 2011-10-02
    • 2014-04-25
    相关资源
    最近更新 更多