Hi all - I am interested in setting up a few small community sites with discourse plus nextcloud for document and media content sharing. It would be loverly and preferable to have SSO with discourse as SSO provider. If anyone has succeeded in doing this and can share a recipe here on how to do it I’d appreciate it. Thanks!
The communities I am looking at creating are for my own geographically dispersed family, my neighborhood, and my son’s school.
I might also be interested in setting up a nextcloud for the organization I work for that already has an active community website. Though my organization’s community uses discourse, it uses wordpress as SSO auth now. Down the pike I’m also interested in flipping that around so we can benefit from features reliant on discourse as SSO auth.
Edit: this seems to be the page - I will be exploring this today and will let others know what I come up with if anything. Any guidance along the way much appreciated.
Отлично! Я вижу, что Discourse не включен в Nextcloud в качестве «встроенного провайдера OAuth» для приложения социального входа. Существует несколько способов настроить это через Discourse — как вы это сделали? Не могли бы вы предоставить пошаговую инструкцию?
Также я заметил, что приложение позволяет наследовать группы из провайдера аутентификации, что очень удобно. Я бы хотел иметь возможность настроить это в своей связке Discourse/Nextcloud.
Есть и другие приложения Nextcloud, которые, похоже, актуальны в данном контексте, но я не проверял их все. Существует приложение OpenID Connect Login. Также есть приложение Discourse SSO, но оно, по-видимому, устарело и не тестировалось.
Спасибо, Патрик! Я снова установил приложение и теперь вижу опцию «Custom Discourse». В документации это ещё не объяснено, поэтому я подумал, что ничего не изменилось. Кроме того, на странице https://apps.nextcloud.com/apps/sociallogin есть ссылка на нерабочую ссылку на форуме поддержки Nextcloud, поэтому мне трудно понять, где можно обсудить это приложение с разработчиками.
Теперь у меня всё работает, но самая большая проблема в том, что я не могу понять, как сделать этот метод единственным для входа по умолчанию для всех существующих пользователей.
Вторая по значимости проблема — данные пользователя не переносятся корректно из Discourse в Nextcloud. Новые пользователи, созданные в Nextcloud, получают автоматически сгенерированное имя пользователя в формате [внутреннее имя]-[ID пользователя], например, на моём сайте: kb2-3797. Имя переносится, но другие данные профиля приходится заполнять заново в Nextcloud. Аватар тоже не переносится.
Также меня интересует, как пользователь настроит имя пользователя и пароль для десктопного или мобильного клиента, если это единственный способ входа в веб-приложение Nextcloud. Думаю, им придётся зайти в настройки аккаунта в веб-интерфейсе Nextcloud, чтобы создать учётные данные для входа в Nextcloud.
Ещё несколько замечаний:
Настройки приложения доступны не через раздел «apps», а через боковую панель настроек администратора. Потребовалось немного времени, чтобы найти их.
В настройках администратора для приложения есть три раздела. Кнопки «Сохранить» есть в верхнем и нижнем разделах, но отсутствует в среднем (для пользовательских провайдеров). Неясно, какой из них использовать для сохранения настроек пользовательского Discourse. Ответ: оба работают одинаково.
Настроек приложения много. Вот те, которые лучше всего подходят для моей конфигурации:
disable auto create new users = позволяет создавать новых пользователей в Nextcloud, если они существуют в Discourse
create users with disabled account = не отключать недавно созданных пользователей
allow users to connect social logins with their account = позволяет существующим пользователям подключать вход через Discourse ( не удалось понять, как сделать вход через Discourse по умолчанию)
update user profile every login = синхронизирует группы Discourse с группами Nextcloud при каждом входе ( некорректно синхронизирует имя пользователя, имя, био и другую информацию профиля)
do not prune not available user groups on login ( не знаю, что это делает, но включено по умолчанию. Предполагаю, что это предотвращает удаление пользователя из существующих групп Nextcloud, если они не сопоставлены с группами Discourse?)
automatically create groups if they do not exist = отключено, так как создаёт некрасивые имена групп, дублирующие нужные (см. ниже)
restrict login for users without mapped groups = отключено
restrict login for users without assigned groups = отключено
disable notify admins about new users = отключено, так как мне полезно видеть, когда создаются новые пользователи Nextcloud
hide default login = побуждает пользователей входить через Discourse, хотя вход напрямую с именем пользователя/электронной почтой и паролем Nextcloud всё ещё возможен.
Я сразу потерял доступ администратора при первой попытке, до создания сопоставлений групп. Чтобы вернуть его, мне пришлось перейти в командную строку и выполнить команду occ group:adduser admin USERNAME.
Сопоставление групп работает отлично! Самое важное — добавить сопоставление admins → admin в Nextcloud, чтобы администраторы форума получили права администратора в Nextcloud. Также я смог добавить сопоставления для групп, используемых для защищённых категорий, чтобы предоставить доступ к защищённым папкам в Nextcloud, связанным с этими категориями.
На мой взгляд, это лучший способ реализации, так как идентификатор используется преимущественно внутри системы и не отображается обычным пользователям во многих местах.
В Nextcloud нет простого способа переименовать пользователей, а в Discourse — есть. Переименование пользователя в Discourse может привести к странному поведению с Nextcloud, если имена больше не совпадают.
Отлично! Спасибо, Патрик! Очень ценю ваши рекомендации.
Я создал запись в GitHub по поводу моей основной проблемы: я хотел бы настроить вход для всех пользователей через Discourse, но пока не могу сделать это без того, чтобы давать пользователям инструкции по переключению на Discourse через настройку пользователя «social login connect».
Я установил social_login_auto_redirect, как вы и посоветовали, и это будет работать отлично, когда все будут настроены для использования Discourse. На данный момент это работает для меня лично, но не для других пользователей этих сайтов. Они не смогут войти в систему.
Я не до конца понимаю, что вы имеете в виду под паролями устройств. Я посмотрел по ссылке, которую вы предоставили, но скриншоты настроек пользователя на той странице не похожи на мой экземпляр Nextcloud. Возможно, у нас разные версии? Я использую версию 23.0.0 на стабильном канале обновлений. Или, может быть, мне нужно установить какое-то приложение?
Синхронизация имени пользователя, аватара и биографии менее срочна, хотя было бы здорово, если бы это работало корректно. Не понимаю, почему нельзя обновлять эти данные пользователя при каждом входе. Возможно, есть какие-то особенности Nextcloud, которые плохо сочетаются с Discourse в данном случае. Например, в Discourse разрешён только один пользователь на один адрес электронной почты, а в Nextcloud, похоже, можно создать второго пользователя с тем же адресом, если не включить административную настройку «Запретить создание учётной записи, если адрес электронной почты уже используется в другой учётной записи». В идеале эти учётные записи должны автоматически связываться на основе адреса электронной почты.
Я не уверен, что правильно понимаю вашу текущую проблему, но предполагаю, что она связана с существующими пользователями, у которых нет «подключённой учётной записи социальной сети». Если все пользователи будут подключены, всё будет в порядке?
Как вы уже сами написали, в Nextcloud email не является уникальным и поэтому не может надёжно использоваться для сопоставления пользователей.
Когда я переключился на приложение sociallogin, я подключил существующих пользователей с помощью простого SQL-запроса. Я экспортировал список пользователей Discourse и добавил сопоставление для [внутреннее имя]-[id_пользователя] (например, kb2-3797) с существующими именами пользователей Nextcloud в таблицу sociallogin_connect в базе данных Nextcloud. Какие поля использовать для сопоставления (например, имя пользователя или email), зависит от вашей конфигурации.
Скриншот, кажется, немного устарел, но у меня есть очень похожая таблица (включая «кнопку для создания нового пароля, специфичного для устройства»), когда я открываю /settings/user/security на моём стабильном экземпляре Nextcloud 23.0. Можете ли вы опубликовать скриншот вашей страницы?
Мне не потребуется много времени, чтобы исправить ситуацию с существующими пользователями — у меня на сайте их всего несколько. Однако если говорить о долгосрочном, масштабируемом решении, которое подойдёт всем, кто хочет использовать Discourse в качестве провайдера аутентификации для Nextcloud, то логично разрешить только одного пользователя на один адрес электронной почты и автоматически сопоставлять их по этому адресу. Пользователям не нужно будет предпринимать никаких действий для этого.
Вот как выглядит моя страница /settings/user/security.
Хорошо, это логично, хотя язык немного запутанный. Теперь я вроде бы понял. Для новых пользователей, которые никогда не входили в Nextcloud напрямую и хотят установить приложение, нужно использовать кнопку Создать новый пароль приложения, чтобы создать новый «пароль приложения» для этих целей. В идеале это должен быть отдельный пароль для каждого устройства, но это не обязательно.
Я продолжу следить за обсуждениями на GitHub, чтобы помочь прояснить документацию и решить некоторые проблемы интеграции. Но на данный момент я скажу, что @paroga, ты наконец-то решил этот запрос в службу поддержки, который возник ещё в 2017 году!