bymong
(bymong)
1
我正在尝试为 LogOut 编写示例代码。
我的网站 DNS 是“aaa.com”,用户 ID 是“1”。
我创建了 URL 并像这样发送了请求。
- post AAA Sorry Page
我还发送了带有 api-key、api-Username 的标头。
但我收到了“Oops! That page doesn’t exist or is private.”的响应。
我尝试像这样使用 ‘CURL’。
但我得到了相同的结果。(Oops! That page doesn’t exist or is private~~~)
curl -X POST " AAA Sorry Page "
-H “Content-Type: multipart/form-data;”
-H “Api-Key: secretStringTemp”
-H “Api-Username: system”
-F “id=1” \
你能帮我看看我哪里错了?
blake
(Blake Erickson)
3
我仍然可以通过 API 登出用户。这是我使用的 curl 命令:
curl -i -sS -X POST "http://localhost:4200/admin/users/1/log_out.json" \
-H "Content-Type: multipart/form-data" \
-H "Api-Key: 64b901d2357526d1b6e8c439fd0570f9c585073e6160ae18cc82b7ac358d4893" \
-H "Api-Username: blake.erickson"
HTTP/1.1 200 OK
{"success":"OK"}
如果您仍然遇到问题,能否与我们分享更多关于您的 API 请求的信息?
1 个赞
seanc
(Sean)
4
我卡住了!
我无法使用 API 端点 /admin/users/{USER_ID}/log_out.json 注销用户。
我正在使用以下方法成功检索 discourse USER_ID:/u/by-external/${user.id}.json。
我也通过访问其他 API 端点检索数据,所以我对 API 密钥和我的请求机制感到满意。
但是当我尝试发送 POST 请求时……
await axios.post(`${process.env.FORUM_URL}/admin/users/${UserID}/log_out.json`,{
headers: {
'Api-Key': process.env.DISCOURSE_API_KEY,
'Api-Username': process.env.DISCOURSE_API_USERNAME,
},
});
……我收到状态 404,并返回以下对象:
{
errors: [ 'The requested URL or resource could not be found.' ],
error_type: 'not_found'
}
我设法顺利实现了 SSO。关于注销为何可能不起作用的任何见解都将非常有帮助。
干杯。
乍一看这似乎没问题:thinking: 。UserID 是否包含正确的值?
seanc
(Sean)
6
是的,在测试用例中,它是 1(通过调用 /u/by-external/${user.id}.json 获得)。我也尝试过硬编码该值,只是为了再次检查……结果相同。
我已将其他主题的帖子移至此处,以便将讨论集中在一起。
如果有点不同步,请谅解。
3 个赞
blake
(Blake Erickson)
9
我可以通过使用无效的用户 ID 来复制 404 错误消息。你能先验证一下你是否可以通过 ID 获取用户吗?
curl -i -sSL -X GET "http://localhost:4200/admin/users/1.json" \
-H "Api-Key: 64b901d2357526d1b6e8c439fd0570f9c585073e6160ae18cc82b7ac358d4893" \
-H "Api-Username: blake.erickson"
HTTP/1.1 200 OK
{
"id": 1,
"username": "blake.erickson",
...
1 个赞
seanc
(Sean)
10
好的,我已确认我从 Discourse 中检索到了有效的 user_id,在此示例中为 1…
{
"id":1,
"username":"Sean",
...
}
有趣的是,当我向用户 ID 1 的 log_out 端点发送 cURL 请求时…
curl -i -sS -X POST https://community.site.com/admin/users/1/log_out.json
-H "Content-Type: multipart/form-data"
-H "Api-Key: my-api-key"
-H "Api-Username: Sean"
…我收到了 200 响应,这表明用户 1(我)应该已从论坛注销,但当我检查时,我实际上并未被注销 - 这是第一个问题。
第二个问题是,从我的应用程序后端使用 axios(如上所述)发送相同的请求会导致 404…非常奇怪。
编辑:
第一个问题不是问题 - cURL 请求已成功将我注销 - 现在只需要弄清楚为什么 axios 的 post 请求会返回 404。
1 个赞
seanc
(Sean)
11
好的 - 谜团解开了 
原来我的 axios 请求格式不正确!由于我没有在 post 请求中发送任何 body,我应该在请求中传递一个空对象。
感谢 @blake 关于 curl 请求的指导 - 这最终为我解开了谜团。 
3 个赞
您好 Sean,
您能否分享一下 log_out.json 代码,因为我正在处理一个类似的需求。
我尝试使用 POST API ‘admin/users/{user_id}/log_out.json’ 退出论坛,但返回“哎呀!该页面不存在或为私有页面。”
我在标头中提供了 api_key 和 api-username。有人遇到过同样的问题吗?
Canapin
(Coin-coin le Canapin)
16
我通过向 /admin/users/1/log_out.json 发送 POST 请求成功地将自己登出。
正文为空,标头包含一个管理员 Api-Username 和一个具有全局范围或已勾选登出功能的粒度范围的 Api-Key。
1 个赞
Canapin
(Coin-coin le Canapin)
18
您是用什么软件或编程语言进行 API 调用的?可以把您的代码复制粘贴到这里吗?