我应该把 discourse 的 API 密钥放在哪里才能获取帖子?

我正在尝试获取我的 discourse 的帖子,但我不知道应该在哪里放置我的 API 密钥。因此,我尝试获取一个:https://{defaultHost}/posts/{id}.json,但它给了我一个错误,因为我没有输入 API 密钥,但我应该在哪里输入 API 密钥?

我不知道您是如何发出 API 请求的(使用什么工具或编程语言),但 API 密钥和用户名应放在 HTTP 标头中。

以下是来自 Discourse REST API Documentation 的 curl 示例:

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"
2 个赞

我在 Next.js 中进行此操作。我应该把那段代码放在哪里?

我不熟悉 nextJS,所以不太确定,但看起来 nextJS 使用一个名为 SWR 的工具来发出 API 请求

您需要非常小心您在客户端存储的 API 密钥的范围,以及您向 Discourse 发出的 API 调用,以免将您的全局 API 密钥暴露给用户,因为看起来 nextJS 是一个客户端框架而不是服务器端框架。正确的方法可能是让 next.js 进行服务器端 API 请求,然后该请求向您的 Discourse 实例发出经过身份验证的 API 调用。

这个答案可能会帮助您:

根据文档 https://swr.vercel.app/docs/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);
1 个赞