'/admin/users/{id}/log_out.json' 不起作用了'不起作用

我正在尝试为 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” \

你能帮我看看我哪里错了?

嘿,
我遇到了同样的问题。你解决了吗?
祝好

1 个赞

我仍然可以通过 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 个赞

我卡住了!

我无法使用 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 是否包含正确的值?

是的,在测试用例中,它是 1(通过调用 /u/by-external/${user.id}.json 获得)。我也尝试过硬编码该值,只是为了再次检查……结果相同。

我已将其他主题的帖子移至此处,以便将讨论集中在一起。:+1:

如果有点不同步,请谅解。:slight_smile:

3 个赞

我可以通过使用无效的用户 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 个赞

好的,我已确认我从 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 个赞

好的 - 谜团解开了 :roll_eyes:

原来我的 axios 请求格式不正确!由于我没有在 post 请求中发送任何 body,我应该在请求中传递一个空对象。

感谢 @blake 关于 curl 请求的指导 - 这最终为我解开了谜团。 :+1:

3 个赞

您好 Sean,

您能否分享一下 log_out.json 代码,因为我正在处理一个类似的需求。

我尝试使用 POST API ‘admin/users/{user_id}/log_out.json’ 退出论坛,但返回“哎呀!该页面不存在或为私有页面。”
我在标头中提供了 api_key 和 api-username。有人遇到过同样的问题吗?

您是否需要为该终结点使用管理员 API 密钥?

1 个赞

我通过向 /admin/users/1/log_out.json 发送 POST 请求成功地将自己登出。

正文为空,标头包含一个管理员 Api-Username 和一个具有全局范围或已勾选登出功能的粒度范围的 Api-Key。

1 个赞

是的,我已使用管理员 API 密钥

您是用什么软件或编程语言进行 API 调用的?可以把您的代码复制粘贴到这里吗?