Dostałem kilka punktów końcowych API REST w Django i chciałbym użyć the same authentication dla Graphene. documentation nie zapewnia żadnych wskazówek.Jak używać Graphene GraphQL z uwierzytelnianiem DMS-a REST Framework
15
A
Odpowiedz
15
Na przykład, jeśli używasz authentication_classes = (TokenAuthentication,)
w widokach API, należy dodać punkt końcowy do GraphQLView ozdobione w ten sposób:
urls.py:
# ...
from rest_framework.authentication import TokenAuthentication
from rest_framework.permissions import IsAuthenticated
from rest_framework.decorators import authentication_classes, permission_classes, api_view
def graphql_token_view():
view = GraphQLView.as_view(schema=schema)
view = permission_classes((IsAuthenticated,))(view)
view = authentication_classes((TokenAuthentication,))(view)
view = api_view(['POST'])(view)
return view
urlpatterns = [
# ...
url(r'^graphql_token', graphql_token_view()),
url(r'^graphql', csrf_exempt(GraphQLView.as_view(schema=schema))),
url(r'^graphiql', include('django_graphiql.urls')),
# ...
pamiętać, że dodano nowy punkt końcowy ^graphql_token
i zachowano oryginalną wersję ^graphql
używaną przez narzędzie GraphiQL.
Następnie należy ustawić nagłówek Authorization
w kliencie GraphQL i wskazać punkt końcowy graphql_token
.
3
Dodanie kilku dodatkowych kroków, które musiałem podjąć, gdy po tej integracji:
class RTGraphQLView(GraphQLView):
def parse_body(self, request):
if type(request) is rest_framework.request.Request:
return request.data
return super().parse_body(request)
Grafen spodziewałem się .body
attr ale DRF czyta i przywiązuje go do .data
zanim przeszedł do GraphQLView.
Czy to nadal działa? Próbuję zrobić to samo z SessionAuthentication, ale dostaję błąd z powrotem od graphene-django, gdy próbuje odczytać treść żądania? – Joe
Nadal działa, ale nie mam najbardziej aktualnych wersji pakietów. Moja odpowiedź używane: Django == 1.8.3 djangorestframework == 3.2.2 django-graphiql == 0.4.4 grafenu == 0.10.2 graphql-core == 0.5.3 graphql-django-view = = 1,3 graphql-relay == 0.4.4 –