电子邮件验证django rest框架

时间:2020-10-15 15:34:37

标签: python django django-models django-rest-framework django-views

我正在使用Django Rest Framework创建一个api,当用户注册(注册)帐户时,用户会收到带有验证链接的验证电子邮件,一旦单击该帐户便应进行验证。 我使电子邮件发送部分正常工作并进行了配置。

我的问题是: 如何在用户单击验证电子邮件端点中的链接时激活帐户(解码有效负载)??我似乎找不到通过互联网查找的内容,浏览了DRF文档,但找不到它。

我使用的是Django REST随附的Django令牌认证。

非常感谢您的投入。

谢谢。

1 个答案:

答案 0 :(得分:1)

首先,生成confirmation_token

from django.contrib.auth.tokens import default_token_generator

confirmation_token = default_token_generator.make_token(user)

然后将此confirmation_token以及user_id添加到将在电子邮件中显示的激活链接:

actiavation_link = f'{activate_link_url}?user_id={user.id}&confirmation_token={confirmation_token}'

最后,当用户通过上面生成的activate进行导航时,应该调用此actiavation_link视图/动作:

@action(detail=False, permission_classes=[AllowAny], methods=['get'])
def activate(self, request, pk=None):
    user_id = request.query_params.get('user_id', '')
    confirmation_token = request.query_params.get('confirmation_token', '')
    try:
        user = self.get_queryset().get(pk=user_id)
    except(TypeError, ValueError, OverflowError, User.DoesNotExist):
        user = None
    if user is None:
        return Response('User not found', status=status.HTTP_400_BAD_REQUEST)
    if not default_token_generator.check_token(user, confirmation_token):
        return Response('Token is invalid or expired. Please request another confirmation email by signing in.', status=status.HTTP_400_BAD_REQUEST)
    user.is_active = True
    user.save()
    return Response('Email successfully confirmed')