生成的带邮件的邀请链接无法兑换

我正向 /invites.json API 端点发送以下 JSON 数据:

{
    "email": "new.member@example.com",
    "skip_email": true,
    "max_redemptions_allowed": 1,
    "expires_at": << 当前日期 + 1 个月 >>
    "group_names": "example_group"
}

这会创建一个有效的邀请,随后我获取邀请链接并提供给用户。

然而,当用户尝试兑换邀请时,在 discourse/app/controllers/invites_controller.rb at main · discourse/discourse · GitHub 处失败,并返回通用的 invite.error_message 错误,原因是数据库更新失败(具体原因不明)。

我一直在尝试追踪代码,但并未发现任何明显的问题。

以下是 invites 表中的一条示例记录:

  id  |            invite_key            |            email             | invited_by_id | user_id | redeemed_at |         created_at         |         updated_at         | deleted_at | deleted_by_id |       invalidated_at       | moderator | custom_message | emailed_status | max_redemptions_allowed | redemption_count |       expires_at
 1587 | 4b4e........................2307 | example@gmail.com            |             1 |         |             | 2021-04-11 23:51:05.253528 | 2021-04-11 23:51:05.253528 |            |               |                            | f         |                |              0 |                       1 |                0 | 2021-05-11 11:51:05.193

您尝试过从 UI 执行此操作吗?是否有效?如果有效,UI 发出的请求与您发出的请求有何不同?

站点上的 /logs 中是否有任何信息?

不幸的是,日志中没有任何记录。我还没有尝试过从 UI 操作,会去检查一下。

顺便问一下,是否有某篇帖子描述了如何在生产环境中应用补丁或运行 fork?请查看我的这条评论:Install Discourse for development using Docker - #152 by jessicah

@sam 看起来这个问题只影响部分用户,而不是所有用户,但我还没能找出其中的差异 :-/

我本想运行一个补丁来添加更多日志,但根据上一条消息中的链接,虽然我可以在开发环境中运行,却无法在我的生产实例中使其正常工作,因此不太清楚该如何进行调试 :frowning:

并非所有用户都允许邀请,请确认通过 API 执行邀请操作的用户是否具有邀请权限。

invited_by_id 为 1,即管理员,用于所有邀请。

1 个赞

你好,Jessica,

自 4 月以来,我们的邀请码已经发生了巨大变化,不知您是否仍遇到相关问题?

抄送 @dan

2 个赞