电子邮件地址变更时二次确认失败,原因是电子邮件自定义设置

你好,我搜索了该问题的答案,但未能找到相关信息。我是论坛的管理员,通常通过 Google 身份验证登录。我想更改我的电子邮件地址,并从偏好设置页面开始了该操作。第一封确认邮件已发送至我的当前邮箱,我进行了确认——到目前为止一切正常,系统提示将向新地址发送一封确认邮件。第二封确认邮件已到达新邮箱,但当我点击确认链接时,浏览器显示:

哎呀!该页面不存在或为私密页面。

结果是,我的旧邮箱地址在我的账户中仍然处于激活状态。

我可能也遇到了类似的情况。我是我们论坛的管理员。我更改了邮箱地址,并收到了验证邮件——目前为止一切正常。但当我返回论坛时,系统自动将我登录了——我检查了设置。论坛邮件已设置为我的新地址,然而……登录邮箱仍然是最初注册时使用的地址。我进一步排查后发现,必须使用最初注册时使用的相同地址登录我的管理员账户。如果我完全退出登录,然后尝试使用“新”邮箱地址重新登录,就会收到与您相同的错误信息。

请检查您的偏好设置,查看接收论坛邮件的邮箱地址是否已设置为您新的地址。很可能已经设置了。但我敢打赌,用于登录的邮箱地址仍然设置为您最初设置管理员账户时使用的地址。

也许 @dax 或其他团队成员可以解释一下,这是否是预期行为,或者管理员登录邮箱是否需要通过其他方式重置。

我们能在周一重现这个问题吗,@tshenry?这应该是管理员特定的问题。

我在 Discourse 最新已通过测试的版本上测试了管理员邮箱变更流程。除了常规登录凭据外,我还配置了 Google 身份验证。我使用了两款不同的浏览器(Safari 和 Chrome)进行测试,一切运行符合预期。

我还在一个基于约 11 天前提交的 Discourse 站点上进行了测试。该管理员账户已启用标准登录并开启了双重验证(2FA)。自该提交以来,流程略有调整,但仍能正常工作。

如果任何人即使在 Discourse 站点完全更新至最新版本的情况下仍遇到此问题,请逐步说明复现步骤,并提供相关浏览器信息(版本号、操作系统、默认浏览器与已安装的插件等)。如果您使用我们的托管服务且该问题正在发生,请通过常规支持渠道联系我们,我们将直接与您协作排查问题原因。

以下是我多次执行的操作:

  • 在我的“仪表板”下,我将电子邮件地址更改为新的地址。
  • 我收到了来自论坛软件的邮件,并点击了其中的链接进行验证。
  • 检查“仪表板”后,我的电子邮件地址已更新为新地址。这一点在“账单”部分也有显示。
  • 我的新地址也能正常接收新主题/帖子的通知。

然而,在“用户偏好设置/账户”(用于登录)中,仍然显示的是我最初注册论坛时使用的原始电子邮件地址。

  • 我在那里将电子邮件地址编辑为新地址。
  • 点击“保存更改”并退出。
  • 稍后我再次检查,发现仍然显示的是原始电子邮件地址。

每次登录时,登录提示都会说明应使用设置 Discourse 时使用的地址。因此,我并未特意报告此问题,以为这是出于安全考虑。除此之外,我的新电子邮件地址确实能正常接收其应有的内容——如通知、账单收据等。
(顺便一提,我仍然可以访问我的旧邮箱。)

抱歉,我们讨论的不是托管邮箱。我们指的是用户(特别是管理员)通过所有用户在更改邮箱时看到的同一个账户编辑页面,发起邮箱更改操作。

这正是我遇到的问题。我是一名管理员,但无法在该页面上进行更改。我进入我的用户账户偏好设置,修改邮箱地址,点击保存,收到“已发送验证邮件”的通知后退出。当我点击链接并被带到登录页面时,我输入新邮箱地址,却收到提示要求使用首次注册时使用的地址登录。邮箱更改从未被保存,系统又回到了我最初注册时的邮箱地址。:neutral_face:

另一方面,如果我使用来自我拥有的不同域名的邮箱地址——而不是与论坛域名相同的邮箱地址——那么这样就能成功吗?无论如何,这对我来说都不是问题。我可以顺其自然,不去管它。

我已移除 Google 身份验证,以防这是问题的一部分。为了便于复现,我录制了一段 94 秒的操作录屏:

https://drive.google.com/file/d/1eOE2Tptvyk2daWkvDYEFXY3qNKgnImPA/view

@David_Baker1,感谢您花时间制作这段视频。我观看了视频,并在 Chrome 浏览器上仔细跟随操作。一切最终都完美运行,因此您的环境中可能存在某些特殊情况。以下是一些值得考虑的问题:

  • 您网站的 /logs 部分是否有任何看似相关的错误信息?
  • 您是否安装了任何 Chrome 浏览器扩展?如果是,能否尝试在另一个浏览器上执行相同的操作?
  • 您是否安装了任何非官方的 Discourse 插件?
  • 在创建您的网站时,您是否遵循了 discourse/docs/INSTALL-cloud.md at main · discourse/discourse · GitHub 中的说明?

如果将来这确实成为问题,请随时给我们发送邮件,我们将尽力直接为您解决。这是我第一次听说您描述的这个问题。

我刚刚在 Firefox(70.0.1 64 位)上执行了相同的操作,得到了相同的结果。回答如下:

  • 自 11 月 4 日以来,我没有记录到任何错误
  • 我在 Firefox 中再次尝试
  • 我安装了以下插件:discourse-assign、discourse-data-explorer、discourse-plugin-linkedin-auth、discourse-solved、docker_manager
  • 我的实例由本元站点的一位主要贡献者设置和管理,在此之前我从未遇到过任何异常问题

嗯,真奇怪!看来您的设置相当标准。下周我有空时,会结合几个新想法再仔细检查一遍。除此之外,由于我无法复现该问题,目前也无计可施。

再次您好——经过进一步排查,我发现了一些可能揭示问题原因的线索。在我的账户设置/偏好设置中,我的邮箱显示为我想要更改掉的那个邮箱地址。但是,如果我点击该视图右上角的“管理员”按钮,并向下滚动到 SSO 设置部分底部,那里列出的却是我想更改为的邮箱地址。这是我最初设置 Discourse 时使用的邮箱地址。在此期间,我换了新工作,并更改了账户上的邮箱。但现在,我想把它改回来。

因此,现在似乎有两个不同的邮箱与我的账户关联。

这是否可能是导致此问题的潜在原因?

既然 SSO 已禁用,SSO 相关的问题应该无关紧要。但这也有可能就是原因。

您尝试更新的电子邮件地址可能已经是您账户的“次要”电子邮件。如果是这种情况,您需要先删除次要电子邮件地址,然后才能更新您的主要电子邮件地址。

作为站点管理员,您可以通过进入管理页面并点击“次要电子邮件”行的“显示”按钮来确认该电子邮件是否为您账户的次要电子邮件:

从 Rails 控制台删除次要电子邮件地址的说明请参见此帖子:https://meta.discourse.org/t/rake-task-for-merging-users/89086/33

这正是我的情况。在管理后台中,我的邮箱显示为我想要更改的新地址,但在我的用户偏好设置中,它仍停留在最初登录时使用的原始地址上。我的账户还关联了两个不同的邮箱……还是说“用户”和“管理员”被视为两个不同的账户?

我刚刚又检查了一遍。在管理后台中,我没有看到任何次要邮箱账户。

为了确保这不是问题所在,请问您是该网站的管理员吗?除非启用了“版主查看邮箱”设置,否则版主将看不到邮箱字段。该设置默认是禁用的。

是的,我是管理员。

我也是管理员——如果这也针对我的话 :slight_smile:

如果您可以访问您站点的 Rails 控制台,可以通过运行以下命令(将邮箱地址替换为您要更新的邮箱地址)来检查该邮箱是否已被使用:

UserEmail.where(email: 'youremail@example.com')

如果您的站点已安装 Data Explorer 插件,您也可以使用 Data Explorer 查询来检查,而无需使用控制台。

如果返回了任何结果,那就是导致问题的原因。不过,即使您尝试更新的邮箱地址已存在于单点登录(SSO)记录中,通常也不会引发任何问题。

编辑:找到了。user_notifications.confirm_new_email.text_body_template 覆盖了 URL。
你可以忽略其余内容。

嘿,Simon,谢谢你的帮助。

问题如下:

系统发送的是带有类似 https://forum.xx.org/users/authorize-email/c7ed779eb28c049ec4a5105dd9e07013 链接的“确认你的新邮箱地址”邮件,而不是 https://forum.xx.org/u/confirm-new-email/c15d4bc33211e586b70572195f7dac89

如果我手动重写链接以使用正确的 URL 和令牌,它就能正常工作,但不知为何,系统仍在发送旧格式的链接,而不是新格式!(我尝试了两次,一次是在执行了下面描述的 grep 和重启之后。)

我刚刚运行了 ./launcher rebuild,但它仍然发送旧格式的链接。正如宣传所说,只安装了官方认可的插件。

然后我进入容器,在 /var/www/discourse 目录下执行 grep -r authorize-email,结果没有找到任何文件。随后我重启了系统。

这已经是我在 24 小时内第二次完全摸不着头脑了。