Как запросить API gitlab из браузера? - PullRequest
1 голос
/ 30 января 2020

Просто, чтобы дать некоторый контекст, я хотел бы создать блог со страницами gitlab, поэтому я хочу использовать фрагменты для хранения статей и комментариев. Проблема заключается в том, что запрос API из браузера вызывает ошибку CORS. Вот печально известный код:

const postJson = function(url, body) {
    const client = new XMLHttpRequest();
    client.open('POST', url);
    client.setRequestHeader('Content-Type', 'application/json');

    return new Promise((resolve, reject) => {
        client.onreadystatechange = () => {
            if (client.readyState === 4) {
                client.status === 200
                    ? resolve(client.responseText)
                    : reject({status: client.status, message: client.statusText, response: client.responseText})
            }
        }
        client.send(body)
    })
};

postJson('https://gitlab.com/api/graphql', `query {
  project(fullPath: "Boiethios/test") {
    snippets {
      nodes {
        title
        blob {
          rawPath
        }
      }
    }
  }
}`).then(console.log, console.error);

Это имеет смысл, поскольку позволяет мошенническим образом использовать сеанс пользователя.

Существует несколько вариантов:

  • В идеале я хотел бы иметь возможность отключить все формы аутентификации (особенно сеанс), чтобы я мог получить доступ только к информации, публикуемой c для всех.
  • Я мог бы использовать личный токен доступа, но мне это неудобно, потому что области не совсем детализированы, а утечка такого PAT позволит всем увидеть все в моем аккаунте. (не работает)
  • Я мог бы использовать OAuth2, чтобы попросить у каждого читателя авторизацию для доступа к своей учетной записи gitlab, но никто не хочет проходить проверку подлинности для чтения чего-либо.
  • Я мог бы создать фиктивную учетную запись, а затем создать PAT. Это лучший IMO, но он добавляет ненужную сложность. (не работает)

Что такое правильный способ запроса API gitlab из браузера?

1 Ответ

1 голос
/ 31 января 2020

После некоторого исследования я нашел этот способ, чтобы получить статьи и комментарии. Политика CORS сработала из-за запроса POST с содержимым JSON. Простой запрос GET не имеет этого ограничения.

Я могу восстановить информацию в 2 раза:

...