Ошибка API: завершающая точка в имени пользователя вызывает сбой

Мы используем 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.

Спасибо за уточнение.

Мы используем Discourse Connect, но также обращаемся к API.

Кстати, вы упомянули: «Возможно, это был маршрут для неадминистраторов».

Значит, PUT-запрос будет выглядеть так:

/groups/{group_id}/members.json

…с полезной нагрузкой 'email': (email пользователя)… и Discourse просто знает, что у моего пользователя есть права администратора, чтобы добавить этого пользователя в эту группу?

(…извините, я немного запутался, почему для одной и той же операции существует два маршрута…)

Думаю, да. Я использовал инструкцию по реверс-инжинирингу API Discourse, чтобы найти путь. А затем, полагаю, просмотрел исходный код и обнаружил, что также работают ID пользователя и адрес электронной почты.

Да, SSO обновляет группы только при входе в систему, поэтому API — это ваше решение.