Проверка авторизации пользователя в Discourse с другого сайта

Привет, друзья,

Я хотел бы ограничить доступ к определенным страницам нашего веб-сайта в зависимости от того, есть ли у пользователя учетная запись на нашем частном форуме Discourse. Предполагается, что я буду делать это, проверяя на этих страницах, вошел ли пользователь в систему на Discourse в данный момент.

Думаю, правильный инструмент для этого: GitHub - discourse/discourse-auth-proxy: Прокси-сервер HTTP, использующий протокол DiscourseConnect для аутентификации пользователей.

Есть ли пошаговая документация по его использованию?

Могу ли я установить его на тот же цифровой сервер DigitalOcean, что и наш сайт Discourse, или мне нужно разместить его где-то еще?

Можете, пожалуйста, помочь мне с использованием Discourse Auth Proxy?

У меня установлен Discourse на сервере Digital Ocean, а PHP-сайт — на отдельном сервере.

Это можно сделать с помощью DiscourseConnect (при этом Discourse выступает в роли провайдера аутентификации): Use Discourse as an identity provider (SSO, DiscourseConnect).

Я ещё не пробовал это, но параметр prompt может оказаться полезным в вашем случае:

  • prompt: Если prompt=none, то запрос SSO рассматривается как запрос «просто проверка». Если браузер/устройство уже авторизованы в Discourse, система вернёт успешный ответ SSO с информацией об аутентификации пользователя, как обычно. Если браузер/устройство не авторизованы, то Discourse не предложит пользователю войти в систему и сразу вернёт ответ SSO с параметром failed=true вместо информации о пользователе. Это предоставляет механизм проверки, авторизован ли пользователь, не перенаправляя его к диалогу входа, если он не авторизован.

Это выглядит многообещающе, @simon. Я не знал, что DiscourseConnect может работать даже без включения enable discourse connect, но, apparently, может! :thinking:

Я проведу несколько тестов и отчитаюсь — спасибо, что направили меня в этом направлении!

Мне интересно, не упускают ли из виду возможность использования Discourse в качестве провайдера аутентификации из-за его названия (DiscourseConnect). Например, простое добавление термина DiscourseConnect в пост здесь создаёт ссылку на тему об использовании внешнего сайта в качестве провайдера аутентификации для Discourse. Использование Discourse в качестве провайдера аутентификации — одно из моих главных обоснований для создания сайта на Discourse.

На всякий случай, если это поможет: плагин для WordPress позволяет Discourse функционировать как провайдер аутентификации. Соответствующий код находится здесь: wp-discourse/lib/sso-client at main · discourse/wp-discourse · GitHub. Код может быть несколько излишне сложным.

Вот более прямая реализация для приложения на Remix/React: discourse_remix_comments/app/routes/login.tsx at main · scossar/discourse_remix_comments · GitHub. Если проигнорировать TypeScript, то в этом нет ничего сложного.

@simon Я просто хотел ответить и поблагодарить вас. Я действительно считаю, что ваше предыдущее предложение — правильное решение. У меня возникли трудности с его реализацией на моём сайте, но проблема, похоже, в основном заключается в том, что это полукастомная CMS, и много хрупкого кода мешает этому.