Как передать множественные аутентификационные классы в django rest framework? - PullRequest
0 голосов
/ 09 апреля 2020

Я хочу создать API, к которому можно получить доступ, используя client_id и client_secret, а также токен доступа. Чтобы получить доступ к API с помощью client_id и client_secret, у меня есть собственный класс аутентификации, подобный этому: -

class ClientAuthentication(authentication.BaseAuthentication):
    @staticmethod
    def get_client_credentials(request):
        try:
            client_id = request.headers.get('CLIENTID')
            client_secret = request.headers.get('CLIENTSECRET')
        except:
            raise AuthenticationFailed
        return {
            'client_id': client_id,
            'client_secret': client_secret
        }

    def authenticate(self, request):
        credentials = self.get_client_credentials(request)

        client_instance = Application.objects.filter(
            client_id=credentials['client_id'],
            client_secret=credentials['client_secret'],
        ).first()

        if not client_instance:
            raise AuthenticationFailed
        return client_instance, None

    def get_user_application(self, request):
        credentials = self.get_client_credentials(request)

        application_instance = Application.objects.filter(
            client_id=credentials['client_id'],
            client_secret=credentials['client_secret'],
        ).first()

        if not application_instance:
            raise AuthenticationFailed
        return application_instance, None

И другой класс аутентификации, который я хочу использовать, - это OAuth2Authentication по умолчанию. Я попытался передать для проверки подлинности классы authentication_:

authentication_classes = [ClientAuthentication | OAuth2Authentication]

Но это дает мне ошибку. Как мне этого добиться?

...