登录错误

大家好!我的一个论坛用户无法从我们的网站登录论坛,并收到了这个错误。其他用户账户都没有问题,只有他的有问题。我曾以为可以通过将论坛更新到最新版本来解决,但问题仍然存在。
你们有什么想法吗?我感谢任何帮助。

2 个赞

您的登录设置有什么特别之处吗?或者说这个用户有什么特别之处吗?我记得之前看到过一些关于管理员账户的类似错误,但您提供的信息越多越好。:+1:

您在 /logs 中看到任何错误吗?

2 个赞

感谢您的回复!
您是指 /var/discourse/shared/standalone/log/rails 目录下的日志吗?

错误记录在哪一个日志文件中?
production.log 还是 production_errors.log

第二个文件是空的。

1 个赞

我指的是 [YourSite]/logs 的日志,或者他们在尝试登录时浏览器控制台中是否显示了任何内容?那里可能有一些额外的细节有助于缩小范围。

他们是非员工用户吗?您是否启用了任何 SSO?

1 个赞

是的,我认为所有用户都可以使用 SSO 登录,因为他们无需再次输入账号和密码即可登录论坛。他们直接从网站跳转到论坛。

这是控制台中的错误:

这是 Web 中的一个可能错误日志:
ActiveRecord::RecordInvalid (validation failed: Primary email already adopted) app/models/discourse_connect.rb:270:in block in match_email_or_create_user' lib/distributed_mutex.rb:53:in block in synchronize’ lib/distributed

2 个赞

我认为这个特定的用户在 Discourse 上的电子邮件地址与他们在您的主站点上的地址不同。您能检查一下以确认吗?

1 个赞

是的,我刚检查了 Discourse 用户面板上显示的电子邮件以及我们主网站上的电子邮件,它们是相同的。

2 个赞

我已进行了一些调查,一个可能的原因是他们的电子邮件意外地进入了您的阻止列表。您可以在 /admin/logs/screened_emails 页面上搜索并查看是否是这种情况。如果您在那里找到它,取消阻止它可能会解决问题。:+1: (也值得在 /admin/logs/screened_ip_addresses 中检查他们的 IP 地址)

如果不是这种情况,另一种可能性是他们在启用 SSO 之前就已经拥有论坛帐户。您正在使用什么 SSO?

1 个赞

我检查了 /admin/logs/screened_ip_addresses,它是空的。

抱歉,我不明白你的意思。(“你在使用哪种 SSO?”)SSO 有很多种吗?

1 个赞

我想知道您是否使用了 Discourse Connect 或其他工具,以及您将其连接到什么来提供用户身份验证(例如 WordPress)。

我们以前见过这个错误,我刚在我们的工单系统中搜索过。

当你设置了:

  • require activationtrue
  • Discourse 中有一个用户 U1,其电子邮件地址特定,可能带有外部 ID A。
  • DiscourseConnect 提供商端有一个用户 U2,其电子邮件地址相同但外部 ID 不同(B)

用户登录时,Discourse 会检查是否存在外部 ID 为 B 的用户,但不存在。
通常,Discourse 会在下一步进行电子邮件匹配,但由于 require activation 设置为 true,电子邮件地址被视为不受信任,因此它会跳过此步骤,并且不会与用户 U1 关联,因为这会允许账户被盗
所以 Discourse 决定创建一个新用户。但这会失败,因为用户 U1 已经存在该电子邮件地址。

如果电子邮件地址已存在但被视为不受信任,最好能有一个更好的错误提示。我也不确定为什么会显示一个通用的 Rails 错误。

解决方案:

  • 如果你的 DiscourseConnect 提供商端的电子邮件地址已验证且可信,请将 require activation 设置为 false
    或者
  • 将用户 U1 的外部 ID 更改为 B
    或者
  • 将用户 U1 的电子邮件地址更改为其他内容

添加文本“您想要的更改被拒绝”,以便当有人搜索此错误时能找到此主题。

7 个赞

是的,我们正在使用 Discourse Connect,并且它已连接到我们的网站。

非常感谢您详细的回复!我们网站上的电子邮件地址会在用户登录时进行验证。因此,我将首先尝试使用方法 1 来解决问题。但是,在管理员设置中,我没有找到“需要电子邮件激活”的选项。

它是 SSO 过程中返回的参数,请参阅 Disable email verification for SSO - #4 by simon

对于使用 WP Discourse 插件进行身份验证的网站,网站管理员还可以从用户的偏好设置页面将 单个 用户的电子邮件地址标记为已验证:

这比禁用网站上所有用户的电子邮件验证更安全、更简单。

我想知道这是从什么时候开始发生的。我很确定你所描述的情况以前会产生这个错误消息:“您的帐户有问题。请联系网站管理员。”

这里是另一个失败的 Rails 验证器案例,它返回此错误,并且已经存在 6.5 年了。在 DiscourseConnect 的上下文中,这确实是我们过去几个月才看到的情况。

1 个赞

我们正在使用 discourse 镜像,所以我们应该在 env: 中添加 require_activation=true 吗?

感谢您的帮助,但我们不使用 WP。我们正在使用 discourse docker 镜像。正确的配置方法是在 app.yml 文件的 env: 中添加 require_activation=true,对吗?

不,请参阅 Login error - #17 by RGJ

1 个赞