Как можно установить язык для авторизованного пользователя через SSO? Я пытался использовать ключ “locale”, но когда пользователь заходит впервые, это не работает. Мне кажется, что ключ “locale” работает только для анонимных пользователей.
Привет, @Ankur_Tyagi
добро пожаловать в Meta ![]()
Этот пост должен помочь. Вам нужны два параметра.
Для нового пользователя, который ранее никогда не входил в Discourse, это должно сработать, если параметр locale установлен в полезной нагрузке при первом входе пользователя на сайт. Например, используя документацию npm, на которую вы сослались:
var userparams = {
// Обязательно, иначе будет выброшено исключение
"nonce": nonce,
"external_id": "какой-то идентификатор пользователя",
"email": "какая-то электронная почта пользователя",
// Опционально
"username": "какое-то имя пользователя",
"name": "какое-то реальное имя",
"locale": "es"
};
Для существующего пользователя, у которого уже есть учётная запись в Discourse, вам нужно добавить параметр locale_force_update в userparams и установить его значение в true. Я думаю, что в вашем случае вы можете включать параметр locale_force_update как при создании нового пользователя, так и при обновлении пользователя:
var userparams = {
// Обязательно, иначе будет выброшено исключение
"nonce": nonce,
"external_id": "какой-то идентификатор пользователя",
"email": "какая-то электронная почта пользователя",
// Опционально
"username": "какое-то имя пользователя",
"name": "какое-то реальное имя",
"locale": "es",
"locale_force_update": true
};
К сожалению, для обновления локали или любых других атрибутов через полезную нагрузку DiscourseConnect пользователю необходимо выйти из системы Discourse, а затем войти снова. Это означает, что маловероятно, что пользователь получит обновлённую локаль сразу. Существует обходной путь, но я не думаю, что он обрабатывается пакетом npm discourse-sso. Чтобы обновить пользователя через DiscourseConnect без необходимости выходить из системы и снова входить в Discourse, вам нужно сделать запрос к маршруту sync_sso. Подробная информация об этом здесь: Sync DiscourseConnect user data with the sync_sso route.
Если у вас возникают проблемы с правильной установкой локали для новых пользователей или для пользователей, которые выходят из системы и входят снова после добавления параметров локали, попробуйте включить настройку сайта Discourse verbose discourse connect logging. Это позволит вам увидеть параметры, которые отправляются в Discourse со страницы /logs вашего сайта (находится в разделе Администрирование / Журналы / Журналы ошибок).
Привет @Lilly
Спасибо за ваш ответ.
Я пробовал и с новым пользователем, и с обновлением локали для существующего пользователя, но это не сработало. Мне кажется, что это работает только для анонимных пользователей. Я ищу решение для авторизованных пользователей.
Будет полезно, если вы сможете проверить детали конфигурации ниже, возможно, есть что-то, что мне нужно обновить, чтобы исправить это, не уверен.
- Версия форума Discourse: Discourse 3.2.0.beta1-dev
- JS-пакет, используемый для SSO: discourse-sso (версия: 1.0.5)
- Ссылка на пакет Discourse: discourse-sso - npm
Привет, @Ankur_Tyagi! Мне жаль, что у вас всё ещё возникают проблемы. Вы изучили совет Саймона с использованием параметра locale_force_update? Думаю, всё, что я знаю о SSO, я почерпнул от @simon ![]()
Я бы внимательно изучил эту информацию, которую опубликовал @simon, а также официальное руководство DiscourseConnect SSO How-To, на которое была дана ссылка.
Настройка детального ведения журнала Discourse Connect и журналы помогут вам устранить эту проблему:
Спасибо @Lilly, я попробую это решение
