Разрешить использование API обычными пользователями, а не только администраторами

Reverse engineer the Discourse API гласит:

Всё, что вы можете сделать на сайте, вы также можете сделать через JSON API.

К сожалению, на https://docs.discourse.org/ указано:

Некоторые эндпоинты не требуют никакой аутентификации, но для доступа практически ко всему остальному требуется авторизация. Чтобы получить авторизацию, необходимо создать API-ключ в панели администратора.

Это жаль, так как существует множество законных способов использования API, которыми могли бы воспользоваться обычные пользователи, а не только администраторы.

Например, пользователь мог бы настроить ежемесячную задачу cron для загрузки своего preferences.json вместо того, чтобы нажимать кнопку «Скачать» в разделе «Настройки» (Backup/export/import Preferences).

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

(Позволяет выполнять аутентифицированные запросы в зависимости от области действия)


Возможно, вам стоит ознакомиться с этими ресурсами, они могут быть очень полезны :slight_smile:

В Update openapi.yml by jidanni · Pull Request #72 · discourse/discourse_api_docs · GitHub говорится:

Однако без поддержки со стороны администраторов и утверждённой конечной точки в настройках сайта для ключей API пользователей «обычные пользователи» всё ещё не могут просто сгенерировать свои собственные ключи API.

Этот ответ неверен. Любой пользователь может сгенерировать пользовательский API-ключ, если генерация таких ключей включена для уровня доверия пользователя. Если вы не укажете перенаправление в теле запроса, в браузере будет отображён ответ в кодировке base64, содержащий ключ.

Смотрите эту тему для получения скрипта, демонстрирующего, как это делается.

Я думаю о стандартном случае, когда человек А установил Discourse, а человек Б — обычный пользователь на сервере А, причём А не менял никаких настроек администратора. Может ли Б всё же что-то сделать с помощью API?

Генерация ключей API пользователя по умолчанию включена для всех пользователей, и всё, что вы можете сделать через веб-интерфейс, доступно и через API, поскольку веб-интерфейс является лишь фронтендом для API.

Лично я использую его в расширении для Chrome, которое ведёт подсчёт всех моих непрочитанных уведомлений по всем экземплярам, где у меня есть учётные записи, за несколькими исключениями.

Если у пользователя уже есть учётная запись на экземпляре Discourse, он должен иметь возможность использовать ту же куки-аутентификацию из браузера для любых API-запросов, не связанных с браузером.