电子邮件验证 django 休息框架

1 python django django-models django-views django-rest-framework

我正在使用 Django Rest Framework 创建一个 api,当用户注册(注册)帐户时,用户会收到一封验证电子邮件,其中包含验证链接,单击后应验证帐户。我让电子邮件发送部分正常工作并配置。

我的问题是: 当用户单击验证电子邮件端点中的链接(解码有效负载)时,如何让该链接激活帐户?我似乎无法在互联网上找到我要找的东西,我浏览了 DRF 文档,但找不到它。

我正在使用 Django 令牌身份验证进行身份验证,该身份验证随 Django Rest 一起提供。

非常感谢您的投入。

谢谢。

GPr*_*ost 5

首先,生成confirmation_token

from django.contrib.auth.tokens import default_token_generator

confirmation_token = default_token_generator.make_token(user)
Run Code Online (Sandbox Code Playgroud)

然后将其添加confirmation_tokenuser_id将在电子邮件中显示的激活链接中:

actiavation_link = f'{activate_link_url}?user_id={user.id}&confirmation_token={confirmation_token}'
Run Code Online (Sandbox Code Playgroud)

最后,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')
Run Code Online (Sandbox Code Playgroud)