Активация электронной почты пользователя после изменения электронной почты в профиле пользователя Joomla

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

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

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

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

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

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

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


person WooDzu    schedule 10.07.2011    source источник
comment
Попробуйте переопределить функцию изменения электронной почты, чтобы она не подтверждала пользователя, поэтому пользователю необходимо подтвердить электронную почту.   -  person apscience    schedule 14.07.2011
comment
Это основной хак. Боюсь, я не могу принять это. Также ему нужна еще одна новая таблица для токенов активации.   -  person WooDzu    schedule 14.07.2011
comment
Большое спасибо @WooDzu за плагин. Это очень полезно.   -  person S R    schedule 12.10.2018


Ответы (3)


Ну, если вы хотите, чтобы разобраться в этом, попробуйте это:

Напишите собственный подключаемый модуль аутентификации, использующий событие 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
  }
}
person Martin    schedule 14.07.2011
comment
Спасибо, Мартин, тогда я попробую. Что ж, деактивация учетной записи пользователя не кажется хорошим способом, хотя это может быть один из параметров плагина. Кстати, если я напишу плагин, я опубликую его в Интернете. - person WooDzu; 14.07.2011
comment
Это правда, что деактивировать пользователей нехорошо, но что может быть альтернативой тому, чтобы пользователи подтверждали свои новые адреса электронной почты? Я видел проблемы с тем, что Joomla не доставляла электронные письма с активацией, так что это то, на что вы, возможно, захотите обратить внимание. - person Martin; 15.07.2011
comment
Я думал о том, чтобы оставить старую электронную почту к тому времени, когда пользователь активирует свою новую. Временно токен активации и новый адрес электронной почты будут храниться в столбце jos_users-›activation, так как я не хочу создавать для этого новую таблицу. - person WooDzu; 15.07.2011
comment
Здравствуйте снова, я начал разработку плагина. Последнее, что нужно сделать, это активировать новое электронное письмо, которое уже сохранено в параметрах пользователя, и пользователь получает ссылку для активации. Я столкнулся с проблемой, как передать токен активации обратно в плагин. - person WooDzu; 29.08.2011
comment
Разве вы не можете просто запросить базу данных, чтобы получить токен активации? Я бы посоветовал вам задать новый вопрос, поскольку ваш комментарий выше немного расплывчатый. Затем опубликуйте ссылку на свой новый вопрос здесь, чтобы люди могли перейти по ней, если им потребуется то же самое. Я также посмотрю на ответ на ваш вопрос. - person Martin; 01.09.2011
comment
Спасибо за повтор, Мартин. Я уже начал новый вопрос, который сейчас частично решен. Взгляните на stackoverflow.com/questions/7236928/. Спасибо - person WooDzu; 01.09.2011

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

Объяснение:

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

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

person Wailer    schedule 11.04.2012
comment
Привет Вейлер. Я не думал об этом, но мне очень нравится эта идея. Спасибо - person WooDzu; 12.04.2012

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

person Martin    schedule 11.07.2011
comment
Я не согласен. Очень важно убедиться, что введенный вами адрес электронной почты действительно является действительным адресом электронной почты, которым владеет этот человек. Не отправляя письмо для проверки, когда вы меняете адрес электронной почты в профиле, вы можете притворяться кем-то другим. - person apscience; 14.07.2011
comment
Все это относится к контексту пользователей на вашем сайте. Если, например, в интересах пользователя убедиться, что его электронная почта верна, т.е. они разместили что-то на гамтри, а затем оставили дураков указывать неправильный адрес. С другой стороны, если вы, например, PayPal, то для мер безопасности вам потребуется проверка электронной почты до такой степени. Мой ответ выше относится к Joomla, которая дает администраторам возможность соблюдать закон об активации электронной почты. В любом случае см. мой другой ответ :) - person Martin; 14.07.2011