Просто, чтобы дать некоторый контекст, я хотел бы создать блог со страницами 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 из браузера?