首页 > 解决方案 > (Djoser) 更新用户字段时出现奇怪的激活电子邮件

问题描述

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

SEND_ACTIVATION_EMAIL 是 True,但我知道电子邮件只会在以下情况下发送:创建帐户或更新他们的电子邮件(我不更新电子邮件)

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

标签: pythondjangodjoser

解决方案


我有同样的问题。这是由于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)

推荐阅读