如何为SSO用户设置语言

对于 用户(从未登录过 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 的参数。

2 个赞