Вот сценарий использования, с которым, уверен, сталкивались многие:
- Есть множество пользователей в Discourse.
- Есть внешняя система (провайдер услуг, Drupal), которая использует API для создания пользователей Discourse и управления членством в группах.
- В Drupal есть частично пересекающийся набор пользователей. То есть пользователи с одинаковым адресом электронной почты существуют и в Discourse, и в Drupal, но не связаны между собой.
- Drupal использует API для синхронизации пользователей, групп и членства, поскольку пользователи могут никогда не использовать SSO для доступа к Discourse, полагаясь вместо этого на электронную почту.
Текущее поведение:
- Discourse иногда отклоняет API-вызов для создания пользователя Discourse, потому что пользователь с таким же адресом электронной почты уже существует в Discourse.
Желаемое поведение:
- Discourse связывает существующего пользователя Discourse с пользователем Drupal через адрес электронной почты.
Предлагаемое решение:
- Запросить к конечной точке API
/admin/users/list/all.json?email=$emailв Discourse, чтобы получить любых пользователей с совпадающим адресом электронной почты. - Если совпадающий пользователь существует:
- Связать существующих пользователей (на стороне Drupal).
- Иначе:
- Создать нового пользователя Discourse.
Вопросы
- Кажется ли это разумным решением или есть лучший способ?
- Правильно ли сформирован запрос к API?
Ниall.json, ни параметр запросаemailне задокументированы, и я нашел очень мало примеров, но этот пост указывает, что это лучший путь.