Предложение по улучшению разработки интегрированной аутентификации

Как сказал Джефф Аткинсон, электронная почта является основой Discourse, и мы не должны, а возможно, и не можем игнорировать её или обходить.

Однако реальность может быть более неупорядоченной, чем мы представляем: некоторые платформы не предоставляют адрес электронной почты, но мы всё же хотим интегрировать их с нашим Discourse. Решение discourse-oauth2-basic предлагает:

Плагин discourse-oauth2-basic является универсальным решением для OAuth2 и не включает специфические функции для отдельных платформ. Однако при разработке аутентификатора для конкретной платформы, где адрес электронной почты не предоставляется, может потребоваться интеграция системы уведомлений этой платформы вместо стандартных уведомлений по электронной почте.

Мое предлагаемое решение заключается в создании фиктивного адреса электронной почты для уникальной идентификации, например префикс-платформы + id-платформы@ваш-discourse.com, валидатора электронной почты для определения, какую систему уведомлений следует использовать, или внедрении хуков и фильтров для настройки отправителя при отправке уведомления — стандартного уведомления по электронной почте или реализованного аутентификатора. Считаю, что такое решение является ненавязчивым и совместимым с существующей архитектурой.

1 лайк

Это вполне реализуемо. Например, можно использовать вход через Steam (который не предоставляет email), подставить вымышленные адреса электронной почты в форк-версии плагина и использовать нативные push-уведомления (доступные в Windows, macOS, Linux и Android) для всех уведомлений.

Всегда потребуется некоторая доработка для интеграции с конкретной платформой, и в Discourse у нас есть клиенты, использующие подобную настройку с большим успехом. Это одни из самых крупных инстансов!

4 лайка

Да, но, похоже, Discourse отправляет уведомления об экспорте напрямую через Email::Sender с использованием хардкода, вместо вызова хука события уведомления, такого как DiscourseEvent.

Так как же «перенаправить» уведомления в нашу собственную систему уведомлений? Есть ли какой-нибудь публичный пример?

1 лайк