Мы используем API для интеграции Discourse с нашим сайтом (через pydiscourse).
Когда нужно добавить пользователя в группу Discourse через API, pydiscourse использует метод PUT для URL API Discourse:
/admin/groups/{group_id}/members.json
…и передаёт имя пользователя через переменную ‘usernames’.
Если имя пользователя содержит точку «.», проблем нет, за исключением случая, когда точка является последним символом. В этом случае API вернёт ошибку со следующим сообщением:
Вы передали недопустимые параметры в запрос: usernames
Имя пользователя не может заканчиваться точкой, поэтому это ожидаемый ответ. Я собирался проверить исходный код, но вы можете попробовать создать учётную запись здесь с точкой в конце — это недопустимо.
Спасибо за быстрый ответ, Джей. Не подскажете ли вы, можно ли в этой конечной точке API отправлять email пользователя как ‘username’, чтобы Discourse знал, что нужно искать пользователя по email? (Мы используем SSO для подключения нашего Django-приложения к Discourse, поэтому у Discourse должны быть оба идентификатора для каждого пользователя)
О! Да, знаю. Я заметил на днях, что можно использовать адрес электронной почты для конечной точки, которая добавляет пользователя в группу. Возможно, это был маршрут для не-администраторов. Просто укажите email как имя поля с адресом.
Однако, если вы используете Discourse Connect, то вы можете управлять группами при входе в систему, что, скорее всего, именно то, что вам нужно, вместо того чтобы возиться с API.
Кстати, вы упомянули: «Возможно, это был маршрут для неадминистраторов».
Значит, PUT-запрос будет выглядеть так:
/groups/{group_id}/members.json
…с полезной нагрузкой 'email': (email пользователя)… и Discourse просто знает, что у моего пользователя есть права администратора, чтобы добавить этого пользователя в эту группу?
(…извините, я немного запутался, почему для одной и той же операции существует два маршрута…)
Думаю, да. Я использовал инструкцию по реверс-инжинирингу API Discourse, чтобы найти путь. А затем, полагаю, просмотрел исходный код и обнаружил, что также работают ID пользователя и адрес электронной почты.
Да, SSO обновляет группы только при входе в систему, поэтому API — это ваше решение.