Я пытаюсь получить посты с моего Discourse, но не знаю, куда вставлять API-ключи. Я делаю запрос к адресу: https://{defaultHost}/posts/{id}.json, но получаю ошибку, так как ещё не ввёл API-ключи. Где именно нужно их указать?
Не уверен, как именно вы отправляете запросы к API (какой инструмент или язык программирования используете), но ключ API и имя пользователя указываются в заголовке HTTP.
Вот пример с использованием curl из документации: Discourse REST API Documentation
curl -X POST "http://127.0.0.1:3000/categories" \
-H "Content-Type: multipart/form-data;" \
-H "Api-Key: 714552c6148e1617aeab526d0606184b94a80ec048fc09894ff1a72b740c5f19" \
-H "Api-Username: discourse1" \
-F "name=89853c20-4409-e91a-a8ea-f6cdff96aaaa" \
-F "color=49d9e9" \
-F "text_color=f0fcfd"
Я делаю это в Next.js. Где мне разместить этот код?
Я не очень хорошо знаком с Next.js, поэтому не могу сказать наверняка, но, похоже, Next.js использует инструмент под названием SWR для выполнения API-запросов.
Вам нужно быть ОЧЕНЬ осторожным с областью видимости ключа API, который вы храните на стороне клиента, и с теми вызовами API к Discourse, которые вы выполняете, чтобы не раскрыть ваш глобальный ключ API пользователям, поскольку Next.js, похоже, является фреймворком для клиентской части, а не серверной. Правильный способ, вероятно, заключается в том, чтобы Next.js выполнял серверный API-запрос, который затем делает авторизованный вызов API к вашему экземпляру Discourse.
Этот ответ может вам помочь:
Согласно документации Arguments вы должны сделать
const fetcher = (url, token) => axios .get(url, { headers: { Authorization: "Bearer " + token } }) .then((res) => res.data); const { data, error } = useSWR( [`http://localhost:8000/api/v1/users/get-avatar`, auth.token], fetcher ); if (error) console.log(error); if (data) console.log(data);