Аполлон с ошибкой 400 графена мутаций Graphql (не запрос, не мутация django-graphql-jwt, работает реле)

Я использую Apollo v. 2.1, Graphene-django v.2.

Короткий вопрос: некоторые мутации (не все) не работают в Apollo, но они работают в Relay. Apolloerror?


Мутации Аполлона выдают ошибку 400. Ошибка сети: Ответ не успешен. POST - плохой запрос. Queries и Django-graphene-JWT Mutations (tokenAuth и т. Д.) Возвращают правильный результат.

import gql from "graphql-tag";
import { ApolloProvider } from 'react-apollo'
import { ApolloClient } from 'apollo-boost'
import { HttpLink } from 'apollo-link-http'
import { InMemoryCache } from 'apollo-cache-inmemory'
import { ApolloLink } from 'apollo-client-preset'
import { onError } from "apollo-link-error"

const token = cookies.get('AUTH_TOKEN')
const authorizationHeader = token ? `JWT ${token}` : null

const httpLink = new HttpLink({ 
  onError: (e) => { console.log(e.graphQLErrors) },
  credentials: 'same-origin',
  headers: {
    'X-CSRFToken': window.csrf, //CSRF-token from Django-template
    Authorization: authorizationHeader, // auth-token from cookie
  }
})

const client = new ApolloClient({
  link: httpLink,
  cache: new InMemoryCache(),
  connectToDevTools: true,
})

const COUNTRY_MUTATION = gql`
  mutation ($country: String) {
    createCountry(
        country: "Liberland",
      ){
      country {
        name
      }
    }
  }
`

client.mutate({
mutation: COUNTRY_MUTATION, variables: {country:"Liberland"}}).then((resp) => {
  console.log(resp)
}).catch((error) => {
  console.log(error)
});

Джанго не возвращает ошибок. Аполлон (консоль) возвращает ошибку. Можно производить мутации внутри GraphIQL/Insomnia без ошибок.

Я попытался включить / выключить Django-url csrf_excempt без изменений. Если csrf_exempt выключен, и я не добавляю X-CSRFToken в index.js, я получаю ошибку 403. GraphIql выключен. Окно браузера разработчика показывает возврат JSON.

Если я делаю schema.execute в django, мутация работает нормально.

Основная схема:

import graphene
import graphql_jwt
import about.schema
import shop.schema

class Query(shop.schema.Query, graphene.ObjectType):
  pass

class Mutation(shop.schema.Mutation, graphene.ObjectType):
  token_auth = graphql_jwt.ObtainJSONWebToken.Field()
  verify_token = graphql_jwt.Verify.Field()
  refresh_token = graphql_jwt.Refresh.Field()

schema = graphene.Schema(query=Query, mutation=Mutation)

Схема магазина:

class CountryType(DjangoObjectType):
  class Meta:
    model = Country

class CountryInput(graphene.InputObjectType):
  name = graphene.String()

class CreateCountry(graphene.Mutation):
  country = graphene.Field(CountryType)

  class Arguments:
    country = graphene.String()

  def mutate(self, info, country="LIBERLAND"):
    country = Country(
      name=country,
    )
    country.save()

    return CreateCountry(
      country=country
    )

class Query(graphene.ObjectType):
  country = graphene.List(CountryType)

  def resolve_country(self, info):
    return Country.objects.all()

class Mutation(graphene.ObjectType):
  create_country = CreateCountry.Field()

Я думаю, что проблема с APOLLO. Те же мутации возможны с RELAY. Неправильно ли настроен мой apollo-setup?

0 ответов

Другие вопросы по тегам