Отключить проверку электронной почты для SSO

Привет,

Я настроил Discourse для использования Auth0 в качестве провайдера SSO. Проблема в том, что при регистрации пользователя ему приходят два письма с подтверждением: одно от Auth0 и одно от Discourse.

Есть ли способ отключить письмо от Discourse?

Заранее спасибо

Если адреса электронной почты подтверждаются через Auth0, вы можете отключить письма с подтверждением от Discourse, выбрав настройку сайта oauth2 email verified. Ссылка на эту настройку есть в этом посте: Configure sign up and log in with Auth0 using the OAuth2 Basic Plugin - #33 by blake.

Спасибо за ответ @simon, но я использую SSO, а не OAuth2.

Термин SSO используется для нескольких различных методов аутентификации. Это не раз вызывало путаницу в прошлом.

Если вы используете реализацию SSO в Discourse, то проверка электронной почты контролируется параметром SSO require_activation. Установите этот параметр в значение "false", чтобы обойти проверку электронной почты.

Спасибо еще раз, @simon

Я хочу избежать полного отключения этой функции. В данный момент у меня настроено так, что require_activation возвращает true или false в зависимости от того, подтверждена ли учетная запись через Auth0. Это работает нормально: после того как пользователь перейдет по ссылке из письма Auth0, при следующем входе в Discourse он будет автоматически подтвержден.

Так что в идеале нужно просто отключить отправку письма, если только я что-то не упускаю.

Это имеет смысл. Наш плагин для WordPress обрабатывает проверку электронной почты аналогичным образом.

Если вы хотите узнать, как значение require_activation используется в Discourse, посмотрите этот файл: https://github.com/discourse/discourse/blob/master/app/models/discourse_single_sign_on.rb#L81. Вы увидите, что когда require_activation установлен в "false" при создании пользователя через SSO, в Discourse создается активный пользователь. Если же оно установлено в "true", пользователь не будет активирован, пока не перейдет по ссылке в письме с активацией от Discourse.

После того как пользователь установлен в статус active в Discourse, единственное, что может потребовать повторной активации, — это включение настройки сайта sso_overrides_email и обновление пользователем своего адреса электронной почты на стороне вашего провайдера SSO.

При значении "true" параметр require_activation также предотвращает сопоставление существующих пользователей в Discourse с пользователями вашего внешнего сайта по адресу электронной почты. Это может вызвать проблемы, если SSO внедряется после того, как пользователи уже были созданы на сайте с помощью входа по имени пользователя и паролю.

Спасибо, это понятно, однако я не совсем понимаю, как это предотвращает отправку письма «Подтвердите электронную почту» от Discourse?

Мне нужно, чтобы отправлялось только письмо от Auth0.

Чтобы письмо с подтверждением отправлялось только с сайта вашего провайдера SSO, пользователям необходимо зарегистрироваться на этом сайте и подтвердить свой адрес электронной почты до первого входа в Discourse. После этого вы сможете установить параметр require_activation в значение "false" для этих пользователей. Они будут созданы в Discourse как активные пользователи, и письмо с подтверждением от Discourse им отправлено не будет.

Это не имеет смысла. Как заставить их подтвердить электронную почту перед первым входом в Discourse?
Мой сайт уже занимается подтверждением электронной почты. Как отключить отправку писем для подтверждения в Discourse, но при этом отображать пользователю сообщение о необходимости аутентификации?

DiscourseConnect предполагает, что вы проверяете адреса электронной почты на своём сайте. Пока вы это делаете, не устанавливайте параметр require_activation в полезной нагрузке SSO. Если этого параметра нет в полезной нагрузке, пользователи будут автоматически входить в Discourse без отправки им письма с активацией.

Да, но тогда Discourse будет считать, что они прошли проверку, что может быть неверно, если пользователь зашёл на форум и забыл или решил не подтверждать адрес электронной почты. Если на веб-сайте параметр require_validation установлен в true, это означает, что пользователь ещё не подтвердил свой адрес на сайте, но ссылку для подтверждения он точно получил, поэтому Discourse не должен отправлять её снова. Однако из-за этого параметра он всё равно отправит.

По сути, проблема возникает только в том случае, если пользователь обращается к Discourse до подтверждения. Сейчас у меня, по сути, есть два варианта:

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

Существует третий вариант: добавить переключатель, который работает только если включен SSO, отключая отправку письма с подтверждением из Discourse (но оставляя страницу ошибки, где пользователю сообщается, что он не подтверждён).

В идеале, когда пользователь создаёт учётную запись на вашем сайте, вы должны подтвердить его адрес электронной почты, попросив его ответить на письмо с активацией, которое отправляется с вашего сайта при регистрации пользователя. Если по какой-то причине вы разрешаете пользователям создавать учётные записи на вашем сайте до подтверждения их адреса электронной почты, вы можете условно установить параметр require_validation в полезной нагрузке SSO. Если пользователь подтвердил свой адрес электронной почты, установите require_validation в false или просто omitите этот параметр из полезной нагрузки. Если пользователь не подтвердил свой адрес электронной почты на вашем сайте, установите параметр require_activation в true, чтобы ему было отправлено письмо с активацией от Discourse.

Именно это я и делаю, и это проблема. Например, пользователь регистрируется, получает письмо с активацией с веб-сайта, но вместо того чтобы открыть его и активировать аккаунт, решает перейти в Discourse, почему бы и нет. Тогда require_activation будет установлен в true, так как пользователь ещё не активирован. Однако Discourse решит, что пользователю нужно отправить ещё одно письмо с активацией, что является проблемой, поскольку уже есть письмо с активацией от веб-сайта, ожидающее открытия. Discourse должен просто отобразить сообщение об ошибке, указывающее пользователю проверить свою электронную почту.