1 python django django-models django-views django-rest-framework
我正在使用 Django Rest Framework 创建一个 api,当用户注册(注册)帐户时,用户会收到一封验证电子邮件,其中包含验证链接,单击后应验证帐户。我让电子邮件发送部分正常工作并配置。
我的问题是: 当用户单击验证电子邮件端点中的链接(解码有效负载)时,如何让该链接激活帐户?我似乎无法在互联网上找到我要找的东西,我浏览了 DRF 文档,但找不到它。
我正在使用 Django 令牌身份验证进行身份验证,该身份验证随 Django Rest 一起提供。
非常感谢您的投入。
谢谢。
首先,生成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_token到user_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)
| 归档时间: |
|
| 查看次数: |
7462 次 |
| 最近记录: |