たとえば、APIビューでauthentication_classes = (TokenAuthentication,)
を使用している場合、次のように装飾されたGraphQLViewにエンドポイントを追加できます。
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(['GET', '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')),
# ...
新しい^graphql_token
エンドポイントを追加し、GraphiQLツールで使用される元の^graphql
を保持していることに注意してください。
次に、GraphQLクライアントでAuthorization
ヘッダーを設定し、graphql_token
エンドポイントをポイントする必要があります。
更新: このGitHubの問題 を参照してください。ここでは、人々が代替ソリューションと完全な実例を提案しています。
この統合を実行するときに実行する必要があったいくつかの追加手順を追加します。
class RTGraphQLView(GraphQLView):
def parse_body(self, request):
if type(request) is rest_framework.request.Request:
return request.data
return super().parse_body(request)
グラフェンは.body
attrを期待していましたが、DRFはそれを読み取り、GraphQLViewに渡される前に.data
にアタッチします。