Как установить язык для пользователей SSO

Как можно установить язык для авторизованного пользователя через SSO? Я пытался использовать ключ “locale”, но когда пользователь заходит впервые, это не работает. Мне кажется, что ключ “locale” работает только для анонимных пользователей.

Привет, @Ankur_Tyagi :wave:t2: добро пожаловать в Meta :slight_smile:

Этот пост должен помочь. Вам нужны два параметра.

Для нового пользователя, который ранее никогда не входил в 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
Спасибо за ваш ответ.
Я пробовал и с новым пользователем, и с обновлением локали для существующего пользователя, но это не сработало. Мне кажется, что это работает только для анонимных пользователей. Я ищу решение для авторизованных пользователей.

Будет полезно, если вы сможете проверить детали конфигурации ниже, возможно, есть что-то, что мне нужно обновить, чтобы исправить это, не уверен.

  1. Версия форума Discourse: Discourse 3.2.0.beta1-dev
  2. JS-пакет, используемый для SSO: discourse-sso (версия: 1.0.5)
  3. Ссылка на пакет Discourse: discourse-sso - npm

Привет, @Ankur_Tyagi! Мне жаль, что у вас всё ещё возникают проблемы. Вы изучили совет Саймона с использованием параметра locale_force_update? Думаю, всё, что я знаю о SSO, я почерпнул от @simon :slight_smile:

Я бы внимательно изучил эту информацию, которую опубликовал @simon, а также официальное руководство DiscourseConnect SSO How-To, на которое была дана ссылка.

Настройка детального ведения журнала Discourse Connect и журналы помогут вам устранить эту проблему:

Спасибо @Lilly, я попробую это решение