再次邀请已删除的用户

这很可能是一个边界情况:在测试 API 端点(/invites.json)时一切正常。随后我删除了被邀请的用户,现在该端点返回 422 响应。通过数据浏览器可以看到该用户已不存在,但邀请记录仍列在 invites 表中。

是否可以用一个已被删除的邮箱地址再次邀请用户?

4 个赞

你好,欢迎!为了澄清一下:在您删除该用户之前,被邀请的用户是否已经接受了邀请并创建了账户?

1 个赞

谢谢!是的,我接受了邀请,然后删除了账户。

1 个赞

好的,我无法复现您描述的情况,除非我误解了您想要实现的目标(这种情况完全可能发生)。如果您能解释一下您预期看到的内容与实际看到的内容之间的差异,可能会有所帮助。

但我使用的是:

版本:2.7.0beta7
操作系统:Ubuntu 20.04.1 LTS

我执行了以下操作:

  • 从界面(管理员 > 用户 > 发送邀请)邀请具有特定电子邮件地址的用户
    • 选择了限制邀请仅限特定电子邮件地址的选项
  • 在单独的无痕窗口中,使用指定的电子邮件地址接受了邀请
  • 作为管理员用户,在我的原始窗口中删除了新注册的用户
  • 使用 Postman 向 https://example.dev/u/my-dev-user/invited.json 发送 GET 请求
    • 这是您使用的端点吗?您提到了 /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 个赞

哦,明白了,现在清楚了——是的,我现在能够复现这个问题了。

我可以通过 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 的用户。
  • 随后,我再次向 API 发送相同的 POST 请求以重新邀请该用户。

请求: 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: 我是新手,这种情况现在算作 bug 上报吗?还是应该发到其他地方,比如 GitHub?

1 个赞

如果我的理解正确,这应该就是一份报告!我们两人合作,我认为基本上已经符合撰写优质错误报告的规范了。

接下来,希望有能够提供解释、变通方法或修复方案的人告知我们下一步该怎么做。

6 个赞

@hcw-rohan @weallwegot 此错误已在 #12927 中修复。

您好,

我认为该错误修复可能已被还原,或者不再有效,因为今天我遇到了这个错误。我按照以下步骤来定位问题:

  • 在管理面板中删除了一个用户
  • 通过 API 邀请该用户
  • 收到失败提示

  • 删除了已删除用户的待处理邀请
  • 通过 API 再次邀请该已删除用户
  • 收到成功提示
  • 收到了邀请,但点击时出现警告:“抱歉!此邀请仅适用于尚未拥有现有账户的新用户。”
  • API 和管理面板均无法找到该已删除用户
  • 最后,我尝试在无痕窗口中打开邀请链接,随后能够以新用户身份登录——这可能是 Cookie 相关的问题?

  • 尝试通过 API 添加新用户
  • 收到成功提示

希望这些信息有所帮助。

你好 Greg,

我尝试复现这个 bug,但在我这里,重新邀请已被删除的用户是成功的。我同时测试了通过邮件和链接发送邀请。

你确定在访问邀请页面时没有处于登录状态吗?显示该消息的代码路径只有一条,我看不出有什么明显问题。