Spac3Rat
(Sérgio Costa)
2021 年12 月 9 日 20:59
1
大家好。我在论坛上使用 SSO,头像由我的网站控制。
直到几天前,通过 API 从网站上传/更新头像到 Discourse 一直在工作。我现在收到一个 422 - Unprocessable Entity 错误。
我尝试调试过这个问题,并使用 Postman 进行了一些测试,但遇到了同样的问题。我正在进行的请求如下(当然,已移除 url、用户名和 api_key)。
你们有人知道 Discourse 的这部分是否存在任何问题吗?
提前感谢。
我的示例:
curl --location --request PUT 'https://{{URL}}/u/{{USERNAME}}/preferences/avatar/pick' \
--header 'Api-Key: {{API_KEY}}' \
--header 'Api-Username: system' \
--header 'Content-Type: application/json' \
--data-raw '{
"upload_id": 972,
"type": "uploaded"
}'
Spac3Rat
(Sérgio Costa)
2021 年12 月 13 日 11:19
4
我认为这会干扰实际的上传,而不是将头像分配给用户。
我可以毫无问题地上传文件。当我调用 API 来指定要用作头像的文件时,就会出现错误,而这个错误是突然出现的。
1 个赞
Spac3Rat
(Sérgio Costa)
2021 年12 月 17 日 17:46
5
我正在尝试运气,再进行一次提升。奇怪的是,没有人找到这个。我确信这不是编码问题,因为它已经运行了几年了。
1 个赞
blake
(Blake Erickson)
2021 年12 月 17 日 22:33
6
我认为这是由于 discourse connect overrides avatar 站点设置。
使用 DiscourseConnect payload 中的值覆盖用户头像。如果启用,用户将不允许在 Discourse 上上传头像。
在我本地取消勾选此项时,通过 API 更新头像时会收到 200 http 响应:
curl -i -sS -X PUT "http://localhost:4200/u/10614bb2d4eacd328c45/preferences/avatar/pick.json" \
-H "Content-Type: multipart/form-data" \
-H "Api-Key: 6cea489d21282803c446fd2e9d236901c3d186f36079911833db4b57c43c01d5" \
-H "Api-Username: blake.erickson" \
-F "upload_id=57" \
-F "type=uploaded"
HTTP/1.1 200 OK
勾选此设置时,我会收到 422 响应:
curl -i -sS -X PUT "http://localhost:4200/u/021ca796a01ad178bc52/preferences/avatar/pick.json" \
-H "Content-Type: multipart/form-data" \
-H "Api-Key: 6cea489d21282803c446fd2e9d236901c3d186f36079911833db4b57c43c01d5" \
-H "Api-Username: blake.erickson" \
-F "upload_id=57" \
-F "type=uploaded"
HTTP/1.1 422 Unprocessable Entity
1 个赞
blake
(Blake Erickson)
2021 年12 月 20 日 21:28
10
我还没有答案,但只是想让你知道这件事在我需要处理的列表上。我有一个可以本地测试的 SSO 设置,以便我们的设置保持一致。看起来我们应该遵循该网站设置,这可能是最近有人所做的更改,但也许我们可以添加一个 API 覆盖。
1 个赞
Spac3Rat
(Sérgio Costa)
2021 年12 月 20 日 21:40
11
非常感谢你,Blake。如果有什么我能帮忙的,请告诉我。
1 个赞
RGJ
(Richard - Communiteq)
2021 年12 月 20 日 22:32
12
该方法的另一个 422 原因可能是 allow_uploaded_avatars 设置为 false。我敢打赌这就是问题所在。
1 个赞
Spac3Rat
(Sérgio Costa)
2021 年12 月 20 日 22:57
13
理查德,您好!感谢您的意见。
我也考虑过这一点,但它不起作用。此外,这个问题是突然出现的。没有人更改任何设置(我是唯一的管理员,所以不可能有人更改任何设置),主网站也没有代码更改,什么都没有。
blake
(Blake Erickson)
2021 年12 月 21 日 22:52
14
您能否告知我 allow_uploaded_avatars 的设置是什么?它不再只是一个 true/false 设置,而是设置为特定的信任级别。另外,您能否告知我尝试更改头像的用户的信任级别是多少?您使用的是最新版本的 Discourse 吗?
这是选择头像的代码以及返回 422 响应的行。
这不代表不可能是代码库深处其他地方的问题,但很可能是这 3 个中的一个。第一个与 discourse_connect_overrides_avatar 有关,显然我们已经排除了它。我不认为第二个是问题,因为您的 curl 命令看起来是正确的,并且包含了“uploaded”类型。第三个关于 allow_uploaded_avatars 设置的可能性仍然存在,这也是我希望了解您该设置值的原因。
Spac3Rat
(Sérgio Costa)
2021 年12 月 22 日 00:00
15
我之前禁用了它,直到这个问题开始出现。然后我将其更改为 0:new user。
但禁用它对我来说一直有效。我不想让用户从论坛上传,而是从使用 SSO 的网站上传。但是,将其更改为 0:new user 没有任何改变。我仍然收到相同的错误
blake
(Blake Erickson)
2021 年12 月 22 日 00:52
16
我找不到任何可能阻止通过 API 使用头像的近期更新,尽管网站设置已阻止它们。无论如何,如果您正在使用 SSO(或 DiscourseConnect ),您应该使用 /admin/users/sync_sso API 路由来更新用户的头像,而不是 UI 路由(/u/username/preferences/avatar/pick)。
并在请求正文中传递这些参数:
avatar_url: "url-of-image",
avatar_force_update: "true"
Spac3Rat
(Sérgio Costa)
2021 年12 月 22 日 09:18
17
Blake,您好。非常感谢您在此事上提供的持续帮助。
我在 API 文档中找不到有关该终结点的信息。这是新功能吗?
另外,正如我之前指出的,使用 /u/username/preferences/avatar/pick 终结点更新头像在过去几个月一直运行良好,这真的很奇怪。它只是突然停止工作了。这让我感到非常困惑。
blake
(Blake Erickson)
2021 年12 月 22 日 14:58
18
Spac3Rat
(Sérgio Costa)
2021 年12 月 22 日 15:21
19
谢谢你,Blake。
对我来说,事情就这样自行停止工作并且我到处都收到 422 错误(即使是那个端点)仍然说不通。
我会尝试寻找其他解决方案。
非常感谢你的时间。
1 个赞