【问题标题】:User email activation after email change in Joomla User profileJoomla 用户配置文件中电子邮件更改后的用户电子邮件激活
【发布时间】:2011-10-02 04:58:54
【问题描述】:

今天我遇到了以下问题:

  1. 我在我的 Joobla 1.6 网站上注册了一个新用户
  2. 通过激活电子邮件中的链接激活帐户
  3. 以新用户身份登录后,我已将电子邮件更改为虚构的 (foo@bar.bar)
  4. Joomla 的反应是:'好的没问题,电子邮件似乎没问题,然后保存它'

Joomla 检查的唯一两件事是电子邮件是否正确写入以及它是否被其他用户使用。

为什么 Joomla 不将相同的激活电子邮件发送到新电子邮件,以便在用户的个人资料中更改它?有什么我应该知道的吗?

这看起来好像配置文件编辑组件中缺少那个非常重要的功能。

如何在不编辑核心文件的情况下使其正常工作?

编辑: 我写了一个插件来解决这个问题:http://extensions.joomla.org/extensions/access-a-security/site-security/site-protection/18139

【问题讨论】:

  • 尝试覆盖更改电子邮件功能,使其取消确认用户,因此用户需要验证电子邮件。
  • 这是一个核心技巧。恐怕我不能接受这个。它还需要另一个用于激活令牌的新表。
  • 非常感谢@WooDzu 的插件。很有帮助。

标签: email joomla activation joomla1.6


【解决方案1】:

如果你想要解决这个问题的方法,那么试试这个:

编写您自己的使用onBeforeStoreUser 事件的身份验证插件。在这里,您可以在用户更改电子邮件地址时检查用户电子邮件是否正确验证。

如果您愿意,您可以停用用户的帐户,然后向他们发送带有链接的新激活电子邮件。查看 com_users 代码,了解在新用户注册和激活电子邮件发送方面如何处理注册。您几乎可以从那里复制代码。

插件的示例代码:

onBeforeStoreUser($user, $isnew) {
  if (!$isnew) {
    // grab code from com_users to generate activation email
    // part of the code makes an activation sequence
    // sql to inject this seq into the users account
    $db = JFactory::getDBO();
    $db->setQuery('
      UPDATE #__users
      SET activation = '.$db->quote($activation_code)).'
      WHERE id='.$user->id.'
    );
    $db->query();
    // send activation email
  }
}

【讨论】:

  • 谢谢马丁,那我试试。好吧,停用用户帐户似乎不是一个好方法,尽管它可能是插件的参数之一。顺便说一句,如果我写了这个插件,我会把它发布到互联网上。
  • 停用用户确实不好,但除了确保用户验证他们的新电子邮件地址之外,还有什么替代方法呢?我之前看到过 Joomla 无法发送激活电子邮件的问题,因此您可能需要注意这一点。
  • 我正在考虑在用户激活他的新电子邮件时留下旧电子邮件。暂时,激活令牌和新电子邮件都将存储在 jos_users->activation 列中,因为我不想为此创建新表。
  • 您好,我又开始开发插件了。最后要做的一件事是激活已存储在用户参数中的新电子邮件,并且用户将获得激活链接。我遇到了如何将激活令牌传回插件的问题。
  • 不能直接查询数据库获取激活令牌吗?我建议你问一个新问题,因为你上面的评论有点含糊。然后在此处发布您的新问题的链接,以便人们在需要相同内容时可以关注它。我也会看看回答你的问题。
【解决方案2】:

也许在处理新邮件之前验证旧邮件帐户是件好事。

解释:

我获得了用户名和密码,我登录了,我将邮件从真实所有者更改为我的,我盗用了帐户,现在可以用我的邮件激活它。

如果我们同时验证旧邮件和新邮件,我们保证新邮件是有效的,并且更改是由原所有者请求的。

【讨论】:

  • 嗨,Wailer。我没有想过这个,但我真的很喜欢这个主意。谢谢
【解决方案3】:

激活电子邮件就是这样 - 一种激活方法。这是为了满足美国等国家/地区的用户信息收集法律,在这些国家/地区有必要让用户在注册时确认他们拥有“此”电子邮件地址。这确保他们自己是签署他们的人。这是激活电子邮件的目的。

【讨论】:

  • 我不同意。确保某人输入的电子邮件实际上是该人拥有的有效电子邮件非常重要。更改个人资料中的电子邮件时无需发送电子邮件检查,您可以伪装成其他人。
  • 所有这些都适用于您网站上用户的上下文。例如,如果确保他们的电子邮件是正确的符合用户的最大利益,例如他们在 gumtree 上发布了一些东西,然后让“笨蛋”输入错误的地址。另一方面,例如,如果您是 PayPal,那么对于安全措施,您需要在此范围内进行电子邮件验证。我上面的回答适用于让管理员能够遵守有关电子邮件激活的法律的 Joomla。无论如何,请参阅我的其他答案:)
猜你喜欢
  • 2014-02-09
  • 2013-08-07
  • 1970-01-01
  • 2011-01-02
  • 1970-01-01
  • 2020-02-15
  • 2016-06-08
  • 2018-04-19
  • 2017-06-22
相关资源
最近更新 更多