新注册时,使用带+的旧邮箱在REST API中不起作用

在最近的一次更新中,似乎不允许使用包含“+”来表示新电子邮件的相同电子邮件进行新注册。我的系统高度依赖它。如何再次启用它?

例如,如果我已经使用 email@gmail.com 注册,则无法使用 email+1@gmail.com 注册。

顺便说一句,我正在使用 REST API 进行测试。

另外,我没有选中此选项:

我认为那是 normalize emails 管理员设置: :+1:

编辑: 我在发帖前没看到那个编辑。 :slight_smile:

1 个赞

是的,它对我来说已经禁用了

1 个赞

我无法在 try.discourse.org 上复制此内容。

您能用此电子邮件从常规 UI 注册吗?

另外,您能否仔细检查一下 +1 电子邮件是否尚未用于注册?

1 个赞

是的,普通用户界面没问题。REST API有问题。

我做了完全相同的事情,并且无法在最新的实时代码上复制该问题 - 当禁用 normalize emails 设置时,它的行为符合预期:

你能否在 rails 控制台中显示这些命令的输出:

[1] pry(main)> SiteSetting.normalize_emails

[2] pry(main)> User.find_by_email('YOURUSERNAME@gmail.com').username

[3] pry(main)> User.find_by_email('YOURUSERNAME+1@gmail.com').username

另外,你使用的是哪个版本的 Discourse?

我可能还会再次检查你是否正在访问你的生产站点而不是测试站点(反之亦然)。

2 个赞

我现在就更新了

这是我的输出

这些翻译成什么?

(你能把它们复制/粘贴在这里吗)

我应该先问这个 :man_facepalming:

“主邮箱被禁止。”

这是对 user.email.blocked 的翻译

嗯……
看来标准化的电子邮件被阻止了。:thinking:
我的意思是,如果 email@gmail.com 被阻止了,那么 email+1@gmail.com 也会被阻止。当我没有选择标准化电子邮件选项时,这对我来说很奇怪。

这就是为什么我应该先问,而不是假设它“已经被占用”了🤣

您在电子邮件和用户类别中覆盖了哪些设置?

您是否阻止了该电子邮件地址,或者,比如说,阻止了 Gmail 域名?

1 个赞

我不明白。我应该在哪里检查?

是的,我可以看到已阻止了规范化电子邮件。

在这种情况下,我们几乎肯定会阻止被阻止地址的子地址,无论设置如何,因为标准化选项不是默认选项,这是一种反滥用措施。

在设置中选择“仅显示已覆盖”。但现在我怀疑我们不必担心这个问题。

2 个赞

回到我的办公桌,我查看了实际执行此拒绝的代码:

在顶部,我们正在检查规范化电子邮件是否在阻止列表中:

  def self.canonical(email)
    name, domain = email.split("@", 2)
    name = name.gsub(/\+.*/, "")
    name = name.gsub(".", "") if %w[gmail.com googlemail.com].include?(domain.downcase)
    "#{name}@#{domain}".downcase
  end

即使那没有捕获它,它也会被这里的 Levenshtein 距离 检查捕获:

[1] pry(main)> ScreenedEmail.levenshtein('fakezabanshenas@gmail.com', 'fakezabanshenas+1@gmail.com')
=> 2

因为 SiteSetting.levenshtein_distance_spammer_emails 的默认值是 2

2 个赞

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.