HTTP 415 по запросу GraphQL от apollo-client к graphene-python

На стороне сервера работает сервер graphql на основе Starlette. На стороне клиента находится приложение Next.js с apollo-client.

Мы используем useQuery хук, который должен передавать данные входа OAuth на сервер graphql, где они обрабатываются, и токен JWT будет возвращен, если все в порядке.

Проблема: получение неподдерживаемого типа мультимедиа HTTP 415 при каждом запросе на вход в систему

Серверный код:

login_data = graphene.String(
    id=graphene.Int(),
    first_name=String(required=True, name="first_name"),
    last_name=String(required=False, name="last_name"),
    auth_date=Int(required=True, name="auth_date"),
    hash=String(required=True),
    photo_url=String(required=True, name="photo_url"),
    username=String(required=False),
)

class Query(graphene.ObjectType):
    login = login_data
    hello = graphene.String()

    def resolve_login(parent, info, **kwargs):
        res = generate_token(kwargs) # Authentication logic which is tested to work
        return res

    def resolve_hello(parent, info, **kwargs):
        return 'Hello'

Клиентский код:

const HELLO = gql`{hello}`

const LOGIN = gql`
    query Login ($id: Int!, $last_name: String, $first_name: String!, $hash: String!, $auth_date: Int!, $username: String, $photo_url: String) {
        login(
            id: $id
            last_name: $last_name,
            first_name: $first_name,
            hash: $hash,
            auth_date: $auth_date,
            username: $username,
            photo_url: $photo_url
        ) {
          token
        }
    }
`


export default function login() {
  const [loginData, setLoginData] = useState({});
  const {loading, error, data} = useQuery(LOGIN, {skip: Object.keys(loginData).length === 0, variables: loginData});

В useQueryлогика работает нормально - запросы делаются только после того, как я получаю данные для входа. Подробности запроса ниже.

Полезная нагрузка:

{
  "operationName": "Login",
  "variables": {
    "id": 111111,
    "first_name": "firstName",
    "last_name": "lastName",
    "username": "username",
    "photo_url": "https://example.com/photo.jpg",
    "auth_date": 1591287901,
    "hash": "b8444...fc8"
  },
  "query": "query Login($id: Int!, $last_name: String, $first_name: String!, $hash: String!, $auth_date: Int!, $username: String, $photo_url: String) {\n  login(id: $id, last_name: $last_name, first_name: $first_name, hash: $hash, auth_date: $auth_date, username: $username, photo_url: $photo_url) {\n    token\n    __typename\n  }\n}\n"
}

Заголовки:

Host: 127.0.0.1:8000
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0
Accept: */*
Accept-Language: en-US,ru-RU;q=0.8,ru;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: text/plain;charset=UTF-8
Origin: null
Content-Length: 644
DNT: 1
Connection: keep-alive

В то же время простой запрос HELLO(определено в коде выше) разрешается нормально. Что я делаю не так?

0 ответов

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