我正在使用Django Rest Framework创建一个api,当用户注册(注册)帐户时,用户会收到带有验证链接的验证电子邮件,一旦单击该帐户便应进行验证。 我使电子邮件发送部分正常工作并进行了配置。
我的问题是: 如何在用户单击验证电子邮件端点中的链接时激活帐户(解码有效负载)??我似乎找不到通过互联网查找的内容,浏览了DRF文档,但找不到它。
我使用的是Django REST随附的Django令牌认证。
非常感谢您的投入。
谢谢。
答案 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')