Активация электронной почты пользователя после изменения электронной почты в профиле пользователя Joomla - PullRequest
0 голосов
/ 10 июля 2011

Сегодня я столкнулся со следующей проблемой:

  1. Я зарегистрировал нового пользователя на своем сайте Joobla 1.6
  2. активировал аккаунт по ссылке из письма активации
  3. После входа в систему в качестве нового пользователя я изменил адрес электронной почты на измененный (foo@bar.bar)
  4. Реакция Joomla была такова: «Хорошо, нет проблем, электронная почта вроде бы в порядке, давайте сохраним ее потом»

Джомла проверил только две вещи: правильно ли написано электронное письмо и используется ли оно другим пользователем.

Почему Joomla не добавляет ту же электронную почту активации к новой электронной почте, чтобы изменить ее в профиле пользователя? Есть что-то, что я должен знать?

Выглядит так, как будто эта очень важная функция отсутствовала в компоненте редактирования профиля.

Как мне заставить его работать без редактирования файлов ядра?

EDIT: Я написал плагин, который сортирует это: http://extensions.joomla.org/extensions/access-a-security/site-security/site-protection/18139

Ответы [ 3 ]

2 голосов
/ 14 июля 2011

Хорошо, если вы хотите найти способ разобраться в этом, попробуйте следующее:

Напишите свой собственный плагин аутентификации, который использует событие 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
  }
}
1 голос
/ 12 апреля 2012

Может быть, было бы неплохо также проверить старый почтовый аккаунт, прежде чем присматривать за новым.

Пояснение:

Я получаю имя пользователя и пароль, я вхожу в систему, я меняю почту с реального владельца на мою, я украл учетную запись и теперь могу активировать ее с помощью своей почты.

Если мы проверяем как старые, так и новые письма, мы гарантируем, что новое письмо действительно, а также изменение было запрошено первоначальным владельцем.

0 голосов
/ 11 июля 2011

Электронная почта активации - это просто метод активации. Это предназначено для удовлетворения законов о сборе информации о пользователях для таких стран, как Штаты, где необходимо, чтобы пользователи подтвердили, что они владеют «этим» адресом электронной почты при регистрации. Это гарантирует, что они сами подписывают их. Это цель писем об активации.

...