Пригласить удалённого пользователя снова

Вероятно, это частный случай. При тестировании конечной точки API (/invites.json) всё работало корректно. Затем я удалил приглашённого пользователя, и теперь от этой конечной точки приходит ответ 422. В Data Explorer видно, что пользователь больше не существует, но приглашение всё ещё отображается в таблице invites.

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

4 лайка

Привет, добро пожаловать! Уточните, пожалуйста: принял ли приглашённый пользователь приглашение или создал ли аккаунт до того, как вы его удалили?

1 лайк

Спасибо! Да, я принял приглашение, а затем удалил аккаунт.

1 лайк

Хорошо, мне не удалось воспроизвести описанный вами сценарий, если только я не неправильно понял, чего вы пытаетесь добиться (это вполне возможно). Возможно, будет полезно, если вы объясните, что вы ожидали увидеть, и что вы фактически видите.

Но я использую:

Версия: 2.7.0beta7
ОС: Ubuntu 20.04.1 LTS

и выполнил следующие действия:

  • пригласил пользователя с конкретным адресом электронной почты через интерфейс: Администрирование > Пользователи > Отправить приглашения
    • отправил приглашение и выбрал опцию ограничения приглашения конкретным адресом электронной почты
  • принял приглашение с указанного адреса электронной почты в отдельном окне инкогнито
  • как администратор в исходном окне — удалил только что зарегистрированного пользователя
  • использовал Postman для отправки GET-запроса к https://example.dev/u/my-dev-user/invited.json
    • это тот же эндпоинт, который вы использовали? вы упоминали /invites.json, но у меня возвращается 404 при использовании этого адреса, я не уверен, что он существует.
  • Получил следующий ответ после удаления пользователя, что соответствовало ожиданиям, так как я удалил пользователя: нет ожидающих, нет выкупленных и нет истёкших:
{
    "invites": [],
    "can_see_invite_details": true,
    "counts": {
        "pending": 0,
        "expired": 0,
        "redeemed": 0,
        "total": 0
    }
}

должно быть возможно — я только что повторно отправил приглашение на тот же адрес электронной почты, который удалил выше, без каких-либо проблем.

2 лайка

Ах, извините, я должен был уточнить конечную точку. Discourse API Docs

Вот шаги, которые я выполнил:

  • Отправил приглашение пользователю через POST-эндпоинт Discourse API Docs
  • Принял приглашение по электронной почте
  • Вошёл в систему как администратор и удалил пользователя
  • Попытался снова пригласить пользователя, выполнив шаг 1. На этот раз я получил ответ 422 с ошибкой: ```
    {
    “failed”: “FAILED”
    }
2 лайка

А, и еще в дополнение: приглашение работает через административный интерфейс, как вы описали, но не через POST-эндпоинт, который я использую.

1 лайк

О, понял, теперь всё ясно — да, это я могу воспроизвести.

Я могу отправлять обычные приглашения на новые адреса электронной почты через API с помощью POST-запроса:
Ожидаемый ответ:

ЗАПРОС: https://example.dev/invites.json?email=example%2Bsomething@hey.com
ФАКТИЧЕСКИЙ ОТВЕТ

{
    "id": 7,
    "invite_key": "inviteKEY",
    "link": "https://example.dev/invites/inviteKEY",
    "email": "example+something@hey.com",
    "emailed": true,
    "custom_message": null,
    "created_at": "2021-04-26T23:57:08.602Z",
    "updated_at": "2021-04-26T23:57:08.602Z",
    "expires_at": "2021-05-26T23:57:08.594Z",
    "expired": false,
    "topics": [],
    "groups": []
}
  • затем я вхожу в систему с другого устройства и принимаю приглашение для этого пользователя.
  • после этого я снова вхожу как администратор и удаляю пользователя с адресом: example+something@hey.com
  • затем я повторно отправляю тот же POST-запрос к API, чтобы пригласить этого пользователя снова

ЗАПРОС: https://example.dev/invites.json?email=example%2Bsomething@hey.com
ОЖИДАЕМЫЙ ОТВЕТ

{
    "id": 8,
    "invite_key": "newinviteKEY",
    "link": "https://example.dev/invites/newinviteKEY",
    "email": "example+something@hey.com",
    "emailed": true,
    "custom_message": null,
    "created_at": "2021-04-26T23:59:08.602Z",
    "updated_at": "2021-04-26T23:59:08.602Z",
    "expires_at": "2021-05-26T23:59:08.594Z",
    "expired": false,
    "topics": [],
    "groups": []
}

ФАКТИЧЕСКИЙ ОТВЕТ

{
    "failed": "FAILED"
}
3 лайка

Ах, хорошо, значит, не только я :slight_smile: Я новичок здесь, это теперь нужно сообщать как ошибку или есть где-то еще, где это можно опубликовать, например, на GitHub?

1 лайк

Если я правильно понимаю, это должно служить отчетом! Между нами, я думаю, мы в основном выполнили стандарт для отчета об ошибке

и, надеюсь, кто-то, кто сможет предоставить объяснение, обходной путь и/или исправление, сообщит нам, что делать.

6 лайков

@hcw-rohan @weallwegot Эта ошибка исправлена в #12927.

Здравствуйте,

Кажется, что исправление ошибки было отменено или больше не работает, так как я столкнулся с этой проблемой сегодня. Я выполнил следующие шаги для выявления проблемы:

  • Удалил пользователя в панели администратора
  • Пригласил пользователя через API
  • Получил сообщение об ошибке

  • Удалил ожидающие приглашения для удаленного пользователя

  • Пригласил удаленного пользователя через API

  • Получил сообщение об успехе

  • Получил приглашение, но при клике получил предупреждение: «Извините! Это приглашение предназначено для новых пользователей, у которых еще нет существующего аккаунта»

  • Ни API, ни панель администратора не могут найти удаленного пользователя

  • Наконец, я попытался открыть ссылку приглашения в режиме инкогнито и смог войти как новый пользователь — возможно, проблема с файлами cookie?

  • Попытался добавить нового пользователя через API

  • Получил сообщение об успехе

Надеюсь, это поможет.

Привет, Грег,

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

Вы уверены, что не были авторизованы, когда переходили по ссылке приглашения? Есть только один путь в коде, который выводит это сообщение, и я не вижу никаких очевидных проблем.