Активиране на потребителски имейл след промяна на имейла в потребителския профил на Joomla

Днес се сблъсках със следния проблем:

  1. Регистрирах нов потребител на моя сайт Joobla 1.6
  2. активира акаунта чрез връзка от имейл за активиране
  3. След като влязох като нов потребител, промених имейла си на измислен ([email protected])
  4. Реакцията на Joomla беше: „добре, няма проблем, имейлът изглежда е наред, нека го запазим тогава“

Единствените две неща, които Joomla провери, бяха дали имейлът е написан правилно и дали се използва от друг потребител.

Защо Joomla не изпраща същия имейл за активиране на новия имейл, за да го промени в потребителския профил? Има ли нещо, което трябва да знам?

Това изглежда така, сякаш тази много важна функционалност липсва в компонента за редактиране на профили.

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

РЕДАКТИРАНЕ: Написах плъгин, който подрежда това: 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
Всичко от това се отнася за контекста на потребителите на вашия сайт. Ако например е в най-добрия интерес на потребителя да се увери, че неговият имейл е правилен, напр. те са публикували нещо в gumtree, а след това оставете глупаците да поставят грешен адрес. От друга страна, ако сте PayPal например, тогава за мерки за сигурност бихте искали имейл валидиране до тази степен. Отговорът ми по-горе се отнася за Joomla, която дава възможност на администраторите да спазват закона относно активирането на имейл. Във всеки случай вижте другия ми отговор :) - person Martin; 14.07.2011