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

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

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


Ошибка выброса мутаций Apollo 400. Ошибка сети: ответ не выполнен.POST - Плохой запрос.Запросы и мутации Django-graphene-JWT (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)
});

Django не возвращает ошибок.Аполлон (консоль) возвращает ошибку.Можно производить мутации внутри 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-установка?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...