Как ограничить анонимных пользователей от конечной точки API GraphQL? - PullRequest
0 голосов
/ 30 июня 2018

У Джанго есть два подхода.

  1. Обычный DRF ограничивает пользователя на уровне Middleware. Так что не залогиненный пользователь ничего не достигает.

  2. В GraphQL, напротив, используется подход «на метод». Таким образом, промежуточное ПО передает все запросы и каждый метод. Но потом метод вызывает декоратор.

Я хочу реализовать 1-й подход, но для GraphQL. Но в этом случае мне нужно открыть путь для мутации входа в систему. Как извлечь имя мутации из полезной нагрузки?

Ответы [ 2 ]

0 голосов
/ 18 июля 2018

Не уверен, что это соответствует вашим целям, но я использовал следующую библиотеку, которая использовала аутентификацию JWT с графеном, аналогично тому, как работает JWT с DRF!

https://github.com/flavors/django-graphql-jwt

0 голосов
/ 06 июля 2018

Если вы хотите ограничить конечную точку API GraphQL для пользователей, вошедших в Django, вы можете сделать это, расширив GraphQLView с помощью LoginRequiredMixin

from django.contrib.auth.mixins import LoginRequiredMixin
from graphene_django.views import GraphQLView

class PrivateGraphQLView(LoginRequiredMixin, GraphQLView):
    """Adds a login requirement to graphQL API access via main endpoint."""
    pass

, а затем добавить этот вид к вашему urls.py как

path('api/', PrivateGraphQLView.as_view(schema=schema), name='api')

обычным способом согласно документам .

Если вы не защищаете весь свой API, вы можете создать другую схему и конечную точку для незащищенных запросов и мутаций, что позволяет четко разделить каждый из них. Например, в urls.py:

path('public_api/', GraphQLView.as_view(schema=public_schema), name='public_api')

Обратите внимание, что для работы каждой конечной точки API должен быть хотя бы один запрос, иначе это вызовет ошибку подтверждения.

...