我正在尝试获取我的 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 个赞