Знает ли кто-нибудь, можно ли сопоставить утверждение name вместо утверждения preferred_username с именем пользователя (никнеймом), отображаемым при регистрации и в всплывающем окне «Создать учётную запись»?
Я вижу настройку «Использовать полное имя пользователя при предложении имён пользователей» в разделе настроек пользователей. Но, кажется, она не влияет на OpenID Connect?
Да, у меня это работает при тестировании с сервером Google OAuth2 в качестве провайдера OpenID Connect.
Я думаю, проблема, с которой вы столкнулись, связана с тем, как работает код предложения имён пользователей в Discourse. Keycloak возвращает preferred_username. Если в информации о пользователе, полученной от провайдера идентификации, установлен preferred_username, он имеет приоритет над значением полей name или given_name/family_name.
Для справки, проблема возникает здесь (preferred_username устанавливается как значение username в методе, который вызывается перед этим):
А затем здесь:
Поскольку значение preferred_username является первым аргументом, передаваемым в код предложения имён пользователей, оно будет использовано. Это означает, что настройка use_name_for_username_suggestions не оказывает никакого эффекта в данном случае. Мне кажется, она была предназначена для обработки ситуации, когда провайдер идентификации не возвращает preferred_username.
Я не вижу хорошего обходного пути, если только вы не сможете предотвратить передачу preferred_username от Keycloak в Discourse.
@simon, вы правы; я проверил упомянутое вами, используя тестовый экземпляр Keycloak. Когда я настраиваю Keycloak так, чтобы preferred_username не передавался в Discourse, система подстановки имён пользователей в Discourse действительно использует имя и фамилию.
Однако мы не можем настраивать наш промышленный Keycloak таким образом, так как конфигурация клиента используется совместно с несколькими другими клиентами, а не только с Discourse.
Было бы полезно иметь возможность влиять на это поведение в рамках плагина.