rafaello9
Осваиваюсь на форуме
 
Репутация: +2/-0
Online
Сообщений: 139
|
 |
« : Сегодня в 12:03:42 » |
|
Общий привет! Есть такая необходимость, чтобы при регистрации нового пользователя (joomla 2.5) в таблицу #__users добавить еще один столбец и внести туда запись. Добавить еще столбец особых проблем не вызывает, выполнить sql-запрос тоже, только вот куда именно надо прописать этот самый sql-запрос? Пожалуйста, подскажите, как мне добавить еще одну запись для нового юзера? Кстати, необходимые уточнения. Название нового столбца принципиального значения не имеет, для примера можно обозвать example, а вот значение, вносимое в этот столбец - это base64_encode($password) Причем, $password - это не хеш, а чистое значение пароля, которое юзер вбивает в поле регистрации. Ну здесь понятно, что после проверки if (jform[password1] == jform[password2]){ $passw = base64_encode($password); sql = "INSERT INTO `#__users` (`example`) VALUES (`$passw`)"; // здесь выполняется вставка значение в столбец } Только где все это дело прописать?
|
|
|
|
|
Записан
|
|
|
|
|
SDKiller
|
 |
« Ответ #1 : Сегодня в 12:39:43 » |
|
Решается на самом деле просто, но с этической точки зрения и с точки зрения безопасности не надо бы этого делать. Или вы хотите сделать клон одноклассников и заняться фишингом паролей?  Да и без клонов - с учётом того что более 70% юзеров используют одни и те же пароли, в том числе и для email, на всех подряд сайтах - как-то неприлично.
|
|
|
|
|
Записан
|
|
|
|
rafaello9
Осваиваюсь на форуме
 
Репутация: +2/-0
Online
Сообщений: 139
|
 |
« Ответ #2 : Сегодня в 12:56:04 » |
|
Дело в том, что на одном домене с joomla2.5 на поддомене установлен другой скрипт (е-мейл рассылок). При регистрации нового пользователя на Joomla, мне необходимо, чтобы этот пользователь смог зайти в свой аккаунт в скрипте рассылок под этими же самыми логином и паролем. Причем, новая запись в таблицу #__users должна вводиться автоматически. Я думаю, что эта необходимость вполне этически выглядит. Что касается безопасности. Здесь просто нет выбора. После некоторых раздумий, я пришел к выводу, что по идее можно как-то вытащить пароль вновь созданного юзера из базы, но так ведь там хэш!. Но мне ведь нужен именно пароль, вводимый в поле при регистрации. Необходимость заставляет использовать base64_encode. Дальнейший ход этих действий такой - я извлекаю из базы запись, пропускаю ее через base64_decode и получаю пароль в чистом виде. А затем уже вношу этот пароль, после некоторых преобразований, в соответствии с требованиями скрипта почтовых рассылок, в базу, в таблицу пользователей этого самого скрипта. Вот!
|
|
|
|
|
Записан
|
|
|
|
|
SDKiller
|
 |
« Ответ #3 : Сегодня в 13:08:16 » |
|
Вообще корректнее бы было реализовать этот ваш скрипт как компонент Joomla и не разводить субдомены с посторонними скриптами. А что касается пароля при регистрации - он же не по пути от браузера пользователя до сайта хешируется )
Смотрите в сторону плагина группы user - на некоторые события при регистрации он передаётся в плагин в незашифрованном виде.
|
|
|
|
|
Записан
|
|
|
|
rafaello9
Осваиваюсь на форуме
 
Репутация: +2/-0
Online
Сообщений: 139
|
 |
« Ответ #4 : Сегодня в 13:45:01 » |
|
Что касается того, чтобы сделать этот скрипт как компонент, то там 20 МБ кода (там кода чем у Joomla более, чем в три раза). А что касается плагина группы user то я нашел там функции onUserAfterDelete, onUserAfterSave, onUserLogin и onUserLogout а куда именно там вставлять, мозгов не хватает. В общем я представляю так. Где-то надо перехватить пост-запрос, переопределить переменную пароля и добавить параметр для вставки в таблицу базы. Но, е-мое, башка не варит, в какой именно функции там это можно сделать. Пожалуйста, разжуйте слегка!
|
|
|
|
|
Записан
|
|
|
|
|
SDKiller
|
 |
« Ответ #5 : Сегодня в 14:15:53 » |
|
Плагин user/joomla посмотрите и найдёте всё что вам нужно
|
|
|
|
|
Записан
|
|
|
|
|
SDKiller
|
 |
« Ответ #6 : Сегодня в 14:19:39 » |
|
Кстати, можно бы было и другим путём пойти - нафига перехватывать пароли и писать их в базу в практически открытом виде, когда можно было бы в том скрипте реализовать такой же алгоритм хеширования и проверки хеша как в Joomla
И тогда вам остаётся просто копировать логины и хеши из базы Joomla в ту базу.
|
|
|
|
|
Записан
|
|
|
|
|
Fedor Vlasenko
|
 |
« Ответ #7 : Сегодня в 14:39:58 » |
|
Гораздо проще проверять наличие ид и по его присутствию делать запрос. Исключив тем самым двойную идентификацию
|
|
|
|
|
Записан
|
|
|
|
|
SDKiller
|
 |
« Ответ #8 : Сегодня в 14:43:06 » |
|
ID чего?
|
|
|
|
|
Записан
|
|
|
|
|
Fedor Vlasenko
|
 |
« Ответ #9 : Сегодня в 14:46:22 » |
|
Юзера естественно. Если есть значит пользователь зарегистрирован в системе и делать запрос в другую базу или таблицу
|
|
|
|
|
Записан
|
|
|
|
|
SDKiller
|
 |
« Ответ #10 : Сегодня в 14:49:06 » |
|
Юзера естественно. Если есть значит пользователь зарегистрирован в системе и делать запрос в другую базу или таблицу
А откуда этот ID взять? У ТС задача чтобы юзер логинился на субдомене. Вот он идёт на субдомен и пытается там логиниться. Что дальше?
|
|
|
|
|
Записан
|
|
|
|
rafaello9
Осваиваюсь на форуме
 
Репутация: +2/-0
Online
Сообщений: 139
|
 |
« Ответ #11 : Сегодня в 14:54:05 » |
|
Кстати, можно бы было и другим путём пойти - нафига перехватывать пароли и писать их в базу в практически открытом виде, когда можно было бы в том скрипте реализовать такой же алгоритм хеширования и проверки хеша как в Joomla
И тогда вам остаётся просто копировать логины и хеши из базы Joomla в ту базу. очень мудрое решение...! ... Но я не смог найти (или не хотел), (хотя я искал) этот механизм в Joomla.
|
|
|
|
|
Записан
|
|
|
|
|
SDKiller
|
 |
« Ответ #12 : Сегодня в 15:01:54 » |
|
plugins\authentication\joomla\joomla.php libraries\joomla\user\helper.php
|
|
|
|
|
Записан
|
|
|
|
|
Fedor Vlasenko
|
 |
« Ответ #13 : Сегодня в 15:38:32 » |
|
Копируете данный код в файл register.php файл записываете в корень сайта. (Тестовое решение, проблемы с безопасностью) Теперь, чтобы пользователь был авторизован, достаточно вызвать ваш домен/register.php?userid=837 где 837 ид авторизованного пользователя <?php define('_JEXEC', 1); define('JPATH_BASE', dirname(__FILE__)); define('DS', DIRECTORY_SEPARATOR); require_once ( JPATH_BASE . DS . 'includes' . DS . 'defines.php' ); require_once ( JPATH_BASE . DS . 'includes' . DS . 'framework.php' );
$app = JFactory::getApplication('site'); $app->initialise(); $user_id = $app->input->getInt( 'userid'); if ($user_id) { $user = JFactory::getUser($user_id); $user->set('aid', 1); $session = JFactory::getSession(); $session->set('user', $user);
jimport('joomla.database.table'); $storage = JTable::getInstance('session');
$storage->session_id = $session->getId(); $storage->guest = 0; $storage->username = $user->name; $storage->userid = $user->id; $storage->gid = $user->gid; $storage->usertype = 'Registered'; $storage->update(); }
|
|
|
|
|
Записан
|
|
|
|
|
SDKiller
|
 |
« Ответ #14 : Сегодня в 16:06:29 » |
|
Теперь, чтобы пользователь был авторизован, достаточно вызвать ваш домен/register.php?userid=837 где 837 ид авторизованного пользователя
1) у ТС на субдомене не Joomla 2) а если бы была - таким образом любой посторонний или бот может подбирать id и авторизовываться Если уж делать синхронизацию "залогиненного" состояния - то при авторизации и не http запросами, а работая непосредственно с базой.
|
|
|
|
|
Записан
|
|
|
|
|
Fedor Vlasenko
|
 |
« Ответ #15 : Сегодня в 16:26:45 » |
|
При регистрации нового пользователя на Joomla, мне необходимо, чтобы этот пользователь смог зайти в свой аккаунт в скрипте рассылок под этими же самыми логином и паролем. Т. есть я как понимаю регистрация на субдомене произведена. Тогда почему к регистрации на субдомене не прикрепить автоматическую регистрацию пользователя Joomla в основном домене 2)Тестовое решение, проблемы с безопасностью
|
|
|
|
|
Записан
|
|
|
|
|
SDKiller
|
 |
« Ответ #16 : Сегодня в 16:29:17 » |
|
Изначально же в условии - первичная регистрация на основном домене где Joomla Параллельно - синхронизация базы пользователей субдомена, где самописное что-то.
|
|
|
|
|
Записан
|
|
|
|
|
Fedor Vlasenko
|
 |
« Ответ #17 : Сегодня в 16:38:42 » |
|
Ух тогда так. Пишем плагин регистрации. При регистрации: 1. получаем e-mail зарегистрированного 2. Делаем запрос на субдомен с выборкой логина пароля 3. Записываем юзера
|
|
|
|
|
Записан
|
|
|
|
rafaello9
Осваиваюсь на форуме
 
Репутация: +2/-0
Online
Сообщений: 139
|
 |
« Ответ #18 : Сегодня в 17:10:02 » |
|
Fedor Vlasenko Ух тогда так. Пишем плагин регистрации. При регистрации: 1. получаем e-mail зарегистрированного 2. Делаем запрос на субдомен с выборкой логина пароля 3. Записываем юзера Большое спасибо, конечно, за помощь, но, действительно, здесь задачка немного другая. На поддомене установлен совершенно другой скрипт (не joomla), но основоном домене стоит Joomla. Мои клиенты регистрируются на основном сайте (joomla) и после этого, могут войти в аккаунт того - другого скрипта, под тем же логином и паролем. Г-н SDKiller все правильно понял. Только вот дело за малым осталось. Не ложиться спать, пока не допилю плагин user/joomla
|
|
|
|
|
Записан
|
|
|
|
|
Fedor Vlasenko
|
 |
« Ответ #19 : Сегодня в 17:14:18 » |
|
могут войти в аккаунт того - другого скрипта вот откуда там данные(логин и пароль) в другом скрипте?
|
|
|
|
|
Записан
|
|
|
|
rafaello9
Осваиваюсь на форуме
 
Репутация: +2/-0
Online
Сообщений: 139
|
 |
« Ответ #20 : Сегодня в 17:21:56 » |
|
логин вытаскивается из базы #__users и вставляется в базу того - другого скрипта. Вот с паролем здесь посложней. Хеш, сохраненный в базе #__users обратно расшифровать - большая проблема, поэтому мне необходимо, где-то перехватить этот пароль, пока он не превратился в хэш, переопределить переменную и выполнить вставку этого пароля в базу того скрипта (другого).
|
|
|
|
|
Записан
|
|
|
|
|
Fedor Vlasenko
|
 |
« Ответ #21 : Сегодня в 17:30:35 » |
|
пишите плагин группы user обрабатывайте событие public function onUserAfterSave($user, $isnew, $success, $msg){} в $user будет ваш пароль не зашифрованный
|
|
|
|
« Последнее редактирование: Сегодня в 17:34:22 от Fedor Vlasenko »
|
Записан
|
|
|
|
rafaello9
Осваиваюсь на форуме
 
Репутация: +2/-0
Online
Сообщений: 139
|
 |
« Ответ #22 : Сегодня в 17:34:53 » |
|
Я никогда в жизни не писал плагинов........ Но... видимо, когда то надо начинать пробовать.
|
|
|
|
|
Записан
|
|
|
|
|
Fedor Vlasenko
|
 |
« Ответ #23 : Сегодня в 17:37:04 » |
|
Все учатся http://jdevtools.com/
|
|
|
|
|
Записан
|
|
|
|
rafaello9
Осваиваюсь на форуме
 
Репутация: +2/-0
Online
Сообщений: 139
|
 |
« Ответ #24 : Сегодня в 17:42:12 » |
|
Простыми словами, на существующем плагине внутри функции onUserAfterSave есть то, что мне нужно?
|
|
|
|
|
Записан
|
|
|
|
|
Fedor Vlasenko
|
 |
« Ответ #25 : Сегодня в 17:44:40 » |
|
вставьте там строку и зарегистрируйтесь var_dump($user); //или die (var_dump($user));
|
|
|
|
« Последнее редактирование: Сегодня в 17:51:39 от Fedor Vlasenko »
|
Записан
|
|
|
|
rafaello9
Осваиваюсь на форуме
 
Репутация: +2/-0
Online
Сообщений: 139
|
 |
« Ответ #26 : Сегодня в 17:48:30 » |
|
я попозже отвечу.... дела возникли
|
|
|
|
|
Записан
|
|
|
|
rafaello9
Осваиваюсь на форуме
 
Репутация: +2/-0
Online
Сообщений: 139
|
 |
« Ответ #27 : Сегодня в 21:51:56 » |
|
Fedor Vlasenko ! Спасибо за реальную помощь! Все-таки я поймал мышку за хвост. А мышка пряталась в [password_clear] =>
|
|
|
|
|
Записан
|
|
|
|
|