Как я могу создать конечную точку регистра с client_id и client_Secret oauth2 в djangorestframework? - PullRequest
0 голосов
/ 11 февраля 2020

Я хочу защитить свои регистрационные API и, следовательно, использовать client_id и client_secret (созданные приложением oauth2) также во время процесса регистрации. Как я могу это сделать?

Вот мой взгляд на регистрацию

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)

1 Ответ

0 голосов
/ 11 февраля 2020

Если к этому API нужно обращаться только при получении client_id и client_secret, то вы можете попробовать следующие два метода -

  1. Сделать пользовательское разрешение. Это правильный способ сделать это. Ссылка - https://www.django-rest-framework.org/api-guide/permissions/#custom -permissions

  2. Проверьте идентификатор и секрет в apiview. Это был бы легкий выход. Для следующего примера, который я рассматриваю, вы отправляете client_id и client_secret в заголовках запросов

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...