Je souhaite protéger mon api d'enregistrement et donc utiliser client_id et client_secret (créés par l'application oauth2) pendant le processus d'enregistrement également. Comment puis-je faire ceci?

Voici mon avis pour l'inscription

class RegisterUserView(generics.CreateAPIView):
    """
    POST auth/register/
    """
    serializer_class = UserRegistrationSerializer

    def post(self, request, *args, **kwargs):
        username = request.data.get("username", "")
        password = request.data.get("password", "")
        email = request.data.get("email", "")
        if not username and not password and not email:
            return Response(
                data={
                    "message": "username, password and email is required to register a user"
                },
                status=status.HTTP_400_BAD_REQUEST
            )
        new_user = User.objects.create_user(
            username=username, password=password, email=email
        )
        return Response(status=status.HTTP_201_CREATED)
0
Aarti Joshi 11 févr. 2020 à 10:18

1 réponse

Meilleure réponse

Si cette API ne doit être accessible que lorsqu'un client_id et un client_secret sont reçus, vous pouvez essayer les deux méthodes suivantes -

  1. Créez une autorisation personnalisée. C'est la bonne façon de procéder. Lien - https://www.django-rest-framework .org/api-guide/permissions/#custom-permissions

  2. Vérifiez l'identifiant et le secret dans apiview. Ce serait la solution de facilité. Pour l'exemple suivant, je considère que vous envoyez le client_id et le client_secret dans les en-têtes de requête

class RegisterUserView(generics.CreateAPIView):
    """
    POST auth/register/
    """
    serializer_class = UserRegistrationSerializer

    def post(self, request, *args, **kwargs):

        if((request.headers['Client-Id'] != client_id) or (request.headers['Client-Secret'] != client_secret):
            return Response(
                data={
                    "message": "Wrong Client id or Client Secret"
                },
                status=status.HTTP_400_BAD_REQUEST
            )


        username = request.data.get("username", "")
        password = request.data.get("password", "")
        email = request.data.get("email", "")
        if not username and not password and not email:
            return Response(
                data={
                    "message": "username, password and email is required to register a user"
                },
                status=status.HTTP_400_BAD_REQUEST
            )
        new_user = User.objects.create_user(
            username=username, password=password, email=email
        )
        return Response(status=status.HTTP_201_CREATED)
0
Kartik Giri 11 févr. 2020 à 07:58