【问题标题】:How to create the flow for a Django App authorization token process如何为 Django App 授权令牌流程创建流程
【发布时间】:2021-07-09 02:09:57
【问题描述】:

我正在构建一个 Django 应用程序。当人们填写表格并单击发送时,我想向他们发送一封电子邮件以进行确认。当他们收到电子邮件时,他们应该有一个链接,当他们点击它时,他们会被发送到他们的申请表。 我想在他们单击链接时使用授权令牌来处理身份验证;这样如果其他人收到电子邮件,他们将无法打开申请表。

我在想当这个人填写表格时,当他们点击发送时会发生以下情况:

  1. 客户端发出令牌请求,发送一些令牌数据,如名称、密码等。
  2. 授权引擎获取请求并发回令牌
  3. 令牌存储在后端的什么位置?是不是进了眼界?它必须在 LocalStorage 中吗?
  4. 然后发送电子邮件。这封电子邮件是从哪里生成的?
  5. 收到电子邮件时;它返回到申请表视图

我对 #3 和 #4 有疑问

【问题讨论】:

    标签: django redirect view token


    【解决方案1】:

    您可以使用它来发送最后附有验证链接令牌的电子邮件

    class Registration(generics.GenericAPIView):
        serializer_class = RegisterSerializer
    
        def post(self, request, *args, **kwargs):
            serializer = self.get_serializer(data=request.data)
            if serializer.is_valid(raise_exception=True):
                user = serializer.save()
                try:
                    user.first_name = request.data['first_name']
                    user.last_name = request.data['last_name']
                    user.save()
                except:
                    pass
                profile_dict = {}
                for i in request.data:
                    profile_dict[i] = request.data[i]
                profile_dict['user'] = serializer.data['id']
                profile_serializer = UserProfileSerializer(data=profile_dict)
                if profile_serializer.is_valid():
                    profile_serializer.save()
                    try:
                        user_snippt = User.objects.get(
                            email=request.data['email'])
                        if user_snippt:
                            name = request.data['first_name']
                            token = AuthToken.objects.create(user)[1]
                            link = 'http://localhost:8000?token=' + token
                            subject = ' registration Link verification.'
                            message = "Email Verification"
                            html_message = render_to_string('email_verify.html',
                                                            {'name': name, 'link': link,
                                                             })
                            from_email = EMAIL_HOST_USER
                            to = user_snippt.email
                            try:
                                send_mail(subject, message, from_email, [to], html_message=html_message,
                                          fail_silently=False)
    
                            except:
                                print({'message': 'Email not Send.'})
                                pass
                            return Response({
                                'message': 'A Link has been sent to user email. Please verify it to complete '
                                           'registration process.'
                            })
                    except Exception as e:
                        print(e)
                        pass
                return Response({'message': profile_serializer.errors}, status=status.HTTP_400_BAD_REQUEST)
            return Response({'message': serializer.errors}, status=status.HTTP_400_BAD_REQUEST)
    

    稍后您可以使用注册的电子邮件 ID 验证链接令牌

    class RegistrationLinkAPIView(APIView):
        def post(self, request):
            try:
                token = request.data['token'][0:8]
                user_id = AuthToken.objects.get(token_key=token).user_id
                user_email = User.objects.get(id=user_id).email
                # digest = AuthToken.objects.get(user_id=user_id).digest
                if user_email:
                    response = {
                        "email": user_email
                        # "token": AuthToken.objects.create(user)[1]
    
                    }
                    return Response(response, status=status.HTTP_200_OK)
                else:
                    return Response({'message': 'Not a valid token'},
                                    status=status.HTTP_400_BAD_REQUEST)
            except Exception as e:
                print(e)
                return Response({'message': 'Not a valid token'},
                                    status=status.HTTP_400_BAD_REQUEST)
    

    【讨论】:

    • 谢谢,不胜感激。你认为你可以回答我上面的问题吗?我还想知道令牌是如何传递给视图的,重定向是如何被拾取和启动的? - 这些是我帖子的症结所在,如果你能回答我会选择你的作为答案 - 谢谢
    猜你喜欢
    • 2020-12-13
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-03
    • 2018-06-24
    • 2017-05-24
    • 1970-01-01
    相关资源
    最近更新 更多