问题是我总是收到没有任何有效负载的 400 响应代码。即使出现问题,graphql 也会使用代码 200 和带有错误块的有效负载。事实上,GraphiQl 工作正常,告诉我设置和架构是正确的。所以......我被困住了。也许,任何想法,在哪里看?
我不认为它失败是因为 cors 本身。我的应用在DRF下运行良好。我决定为我尝试新的技术并使用 GQL 覆盖应用程序。
我的起源:http: //127.0.0.1 :8080
这是我的阿波罗客户:
const cache = new InMemoryCache();
const link = new HttpLink({
uri: "http://127.0.0.1:8000/graphql/",
credentials: "include", // cookies enabled
headers: {
"X-Csrftoken": getTokenCsrf(),
"Content-Type": "application/json"
},
fetchOptions: {
mode: "cors"
}
});
const client = new ApolloClient({
cache,
link
});
有我的要求(通过状态来自表单的变量值):
const AUTH_QUERY = gql`
mutation TokenAuth($username: String!, $password: String!) {
tokenAuth(username: $username, password: $password) {
token
}
}
`;
我使用 react-apollo-hook 来执行查询:
const [sendCreds, loading, error] = useMutation(AUTH_QUERY);
const handleSubmit = e => {
sendCreds({
variables: { username: state.username, password: state.password }
});
};
我的架构(根据文档):
class 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)
从 GraphiQL 处理这个查询会给我一个有效的响应。GraphiQL 在浏览器的另一个选项卡上的http://127.0.0.1:8000/graphql上运行。
询问:
mutation TokenAuth($username: String!, $password: String!) {
tokenAuth(username: $username, password: $password) {
token
}}
变量:
{"username": "qwerty", "password": "qwerty"}
回复:
{
"data": {
"tokenAuth": {
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6InF3ZXJ0eSIsImV4cCI6MTU2NjMwMTkwNiwib3JpZ0lhdCI6MTU2NjMwMTYwNn0.NzgecEfFcnsrudcgrlZyBCC1rutoVJFciUI-ugFq9Fg"
}}}