Аполлон с ошибкой 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?