如何使用 SSO 为已登录用户设置语言?我尝试在用户首次访问时使用“locale”键,但无效。我相信“locale”键仅在用户匿名时才有效。
你好 @Ankur_Tyagi
欢迎来到 Meta ![]()
这篇帖子应该会有帮助。您需要两个参数。
对于 新 用户(从未登录过 Discourse),如果用户首次登录网站的 payload 中设置了 locale 参数,它应该会生效。例如,使用你链接的 npm 文档:
var userparams = {
// Required, will throw exception otherwise
"nonce": nonce,
"external_id": "some user id here",
"email": "some user email",
// Optional
"username": "some username",
"name": "some real name",
"locale": "es"
};
对于 现有 用户(已在 Discourse 中拥有账户),你需要向 userparams 添加 locale_force_update 参数并将其设置为 true。我认为在你的情况下,你可以在创建新用户和更新用户时都包含 locale_force_update 参数:
var userparams = {
// Required, will throw exception otherwise
"nonce": nonce,
"external_id": "some user id here",
"email": "some user email",
// Optional
"username": "some username",
"name": "some real name",
"locale": "es",
"locale_force_update": true
};
不幸的是,要通过 DiscourseConnect payload 更新 locale 或任何其他属性,用户必须先退出 Discourse,然后再重新登录。这意味着用户不太可能立即获得更新的 locale。有一个解决方法,但我认为 discourse-sso npm 包没有处理它。要通过 DiscourseConnect 更新用户而不要求他们退出并重新登录 Discourse,你需要调用 sync_sso 路由。详情请参见:https://meta.discourse.org/t/sync-discourseconnect-user-data-with-the-sync-sso-route/84398。
如果你在新用户或在添加 locale 参数后退出并重新登录的用户那里遇到 locale 设置不正确的问题,请尝试启用 verbose discourse connect logging Discourse 站点设置。这样你就可以在你的站点的 /logs 页面(位于 Admin / Logs / Error Logs)上看到从你的站点发送到 Discourse 的参数。
你好 @Lilly
感谢你的回复。
我也尝试使用新用户以及为现有用户更新 locale,但没有成功。我认为它只适用于匿名用户的情况。我正在寻找一个适用于已登录用户的解决方案。
如果你能查看下面的设置配置详情,那将会有所帮助,也许有什么我需要更新才能修复它,我不确定。
- Discourse 论坛版本:Discourse 3.2.0.beta1-dev
- 用于 sso 的 JS 包:discourse-sso (版本:1.0.5)
- Discourse 包链接:discourse-sso - npm
你好 @Ankur_Tyagi 很抱歉你仍然遇到问题。你是否查看了 Simon 使用 locale_force_update 参数的建议?我认为我所知道的关于 SSO 的一切都来自 @simon ![]()
我建议你仔细查看 @simon 发布的信息以及官方的 DiscourseConnect SSO 操作指南。
verbose discourse connect logging 设置和日志可以帮助你解决此问题:
谢谢 @Lilly,我将尝试此解决方案
