更新后 Get /users/by-external/ 出现 URL 未找到错误

我一直在将我的论坛从 1.6 更新到 3.1,这涉及到迁移到新服务器、恢复备份,然后重新连接所有东西。

我们使用 SSO 登录两者,这仍然有效。

然而,Discourse 现在似乎在一些随机区域抛出错误,这导致使用 API 从网站创建账户时出现问题。
我们之前使用的是 discourse_api ruby gem 的 0.10.1 版本,我已将其更新到 0.48.1。

错误发生在
DiscourseApiService.new.user(self)

这会调用
resp = client.get(\"/users/by-external/#{user.id}\")

这会抛出错误
{\"errors\"=\u003e[\"找不到请求的 URL 或资源。\"], \"error_type\"=\u003e\"not_found\"}

这以前运行正常,但现在不知何故找不到 URL。

我尝试将 discourse_api gem 降级回我们之前运行的 0.10.1 版本,它能顺利通过 client.get 阶段,但在下一次调用时以相同的错误失败:

client.sync_sso(

{\"errors\"=\u003e[\"找不到请求的 URL 或资源。\"], \"error_type\"=\u003e\"not_found\"}

终结点已更改为 /u/by-external/{external_id}.json。该终结点需要 API 密钥和用户名。

1 个赞

我已经解决了这个问题

看起来他们更新了代码,如果找不到用户就会抛出错误,所以我必须 rescue 而不是比较是否为 nil?

begin
    resp = client.get("/users/by-external/#{user.id}")
rescue DiscourseApi::NotFoundError => error
    puts error.response.body['errors'].first
    sync_user(user)
else
    resp.response.env.body['user']
end

另外,响应已从
resp['body']['user']
更改为
resp.response.env.body['user']

我最后剩下的问题是,当我调用 client.sync_sso 时,现在会收到内部服务器错误 500

日志显示
ActiveRecord::RecordNotUnique (PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "user_emails_pkey")

但是,如果我在 rails 终端中使用完全相同的详细信息并运行 client.sync_sso,它运行得非常好

仅供参考,我没有更改上述部分开始再次工作的端点,因此 /users/by-external/ 似乎仍然有效

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.