Не удается добавить пользователя через API

Привет!

Мы пытаемся добавить пользователя через API с помощью следующего запроса:

POST https://discourse.example.de/users
{
    "name": "Bob Tester",
    "email": "example address",
    "password": "#######",
    "username": "testi",
    "active": true,
    "approved": false
}

Наш API-ключ и пользователь определены в заголовке запроса.

Этот запрос возвращает следующий ответ:

Status: 200 OK
{
    "success": true,
    "active": false,
    "message": "<p>Вы почти закончили! Мы отправили письмо для активации на адрес <b>example address</b>. Пожалуйста, следуйте инструкциям в письме, чтобы активировать свою учётную запись.</p><p>Если письмо не приходит, проверьте папку «Спам».</p>"
}

Но пользователь в Discourse не был добавлен?

В примере ответа из документации (Discourse API Docs) указан идентификатор пользователя.

У кого-нибудь есть идея, почему в ответе мы не получаем идентификатор пользователя?

Сообщение в ответе:

— это сообщение из письма подтверждения:

Это означает, что пользователю отправляется письмо с подтверждением. После того как он перейдёт по ссылке в нём, учётная запись будет создана.

Вы используете последнюю версию Discourse? Если передать параметр "active": true, письмо с подтверждением отправлено не будет. См. Creating user via API - #11 by blake.

Привет!

Спасибо за ответ, но он не решает мою проблему.

В моём примере запроса я использовал параметр “active”: true, но в ответе получил “active”: false, поэтому пользователя не удалось активировать — возможно, потому что он ещё не создан?

Независимо от этого:

Если я не отправляю параметр “active”: true в запросе, письмо пользователю не отправляется.

Есть какие-то идеи?

Спасибо!

Не могли бы вы сообщить, какую версию Discourse вы используете? Это поможет нам понять, сможем ли мы воспроизвести вашу проблему.

Конечно — мы используем версию 2.6.0.beta5.
Для нас обновление недоступно.

Отлично, спасибо, просто хотел убедиться, что у вас не старая версия.

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

Можете ли вы попробовать выполнить другой API-запрос, требующий аутентификации, например, создание категории, и проверить, работает ли он? Вы также можете проверить страницу API администратора и посмотреть, когда ключ использовался в последний раз, чтобы убедиться, что он корректно применяется в вашем запросе на создание пользователя.

Мне удалось воспроизвести вашу проблему, выполнив JSON-запрос без учетных данных:

JSON-запрос без учетных данных

curl -i -sS -X POST "http://localhost:3000/users.json" -H "Content-Type: application/json" -d "{\"name\": \"8525f374d470a2e3f22c\", \"active\": \"true\", \"username\": \"8525f374d470a2e3f22c\", \"email\": \"8525f374d470a2e3f22c@example.com\", \"password\": \"65d18e465472452771e02b3462260ea1\"}"

HTTP/1.1 200 OK

{"success":true,"active":false,"message":"\u003cp\u003eВы почти готовы! Мы отправили письмо с активацией на \u003cb\u003e8525f374d470a2e3f22c@example.com\u003c/b\u003e. Пожалуйста, следуйте инструкциям в письме для активации вашего аккаунта.\u003c/p\u003e\u003cp\u003eЕсли письмо не пришло, проверьте папку спама.\u003c/p\u003e"}

vs

JSON-запрос с учетными данными

curl -i -sS -X POST "http://localhost:3000/users.json" -H "Content-Type: application/json" -H "Api-Key: 079fb2bb12d3b436bb11bde8eb58aaa9a36560fa7d79b14b3087aa40b1ebc2c4" -H "Api-Username: blake.erickson" -d "{\"name\": \"da4be85b6046f9c9b9e1\", \"active\": \"true\", \"username\": \"da4be85b6046f9c9b9e1\", \"email\": \"da4be85b6046f9c9b9e1@example.com\", \"password\": \"65d6f0589c5f234de4ad31662b3a17a2\"}"

HTTP/1.1 200 OK

{"success":true,"active":true,"message":"Ваш аккаунт активирован и готов к использованию.","user_id":29}


Сработало — учётные данные были переданы неправильно.

Огромное спасибо за помощь, отличная поддержка! :slight_smile: