Новости Joomla

0 Пользователей и 1 Гость просматривают эту тему.
  • 49 Ответов
  • 3429 Просмотров
*

dm-krv

  • Завсегдатай
  • 1028
  • 28 / 0
В общем-то вышел из положения, выводя $user->_errors[0], но это системное сообщение, а хотелось бы свое.

Привет, подскажи, у тебя опция sendEmail работает? У меня при создании пользователя отчего-то письмо не уходит. Буду признателен, если кто подскажет в чем может быть дело. Мне не сложно самостоятельно отправить письмо внутри этого же скрипта, но если есть возможность использовать встроенные функции Joomla, то я бы предпочел использовать именно их.
 
Код
<?php

// Подключаем фреймворк:

define('_JEXEC', 1);

if (file_exists(__DIR__ . '/defines.php')) {
    include_once __DIR__ . '/defines.php';
}

if (!defined('_JDEFINES')) {
define('JPATH_BASE', __DIR__);
require_once JPATH_BASE . '/includes/defines.php';
}

require_once JPATH_BASE . '/includes/framework.php';

$app = JFactory::getApplication('site');


// Создаем пользователя в группе Авторы:

$user = new JUser;

$userData = array( 'name' => 'Дима',
    'username' => 'dm-krv@yandex.ru',
    'password' => 'master',
    'password2' => 'master',
    'sendEmail' => '1',
    'email' => 'dm-krv@yandex.ru',
    'groups' => array( 3 )
);

$user->bind( $userData );

$save = $user->save();

print_r($user);

// Авторизуем созданного пользователя, если он создан:

if ($save) {

    $login_parol = array( 'username'=>'dm-krv@yandex.ru', 'password'=>'master' );
    $zapomnit = array( 'remember'=>true );
   
    if( JFactory::getApplication()->login($login_parol, $zapomnit)) {
        echo '
        Пользователь успешно авторизован';
    }

}

?>
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
Щх, нихренассе вспомнил ))) я этим занимался в декабре 14-го года, 4,5 года назад )))

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

По вашему коду видно, что вы пытаетесь это сделать в отдельном php-файле, отвязанном от основного фреймворка J, и в этом может быть причина (я никогда так не делаю, у меня всё это дело в контроллере компонента было)
*

AlekVolsk

  • Гуру
  • 6915
  • 415 / 4
вот такой боевой код работает точно (в контроллере компонента):
Код: php
$user = new JUser;
$userData = array('name' => (string)$item_name,
    'username' => (string)$item_login,
    'password' => (string)$item_pss,
    'password2' => (string)$item_pss,
    'email' => (string)$item_email,
    'sendEmail' => 1,
    'requireReset' => 0,
    'groups' => array(2)
);
$user->bind($userData);
if (!$user->save()) { /* тут скопом все ошибки в одной строке генерятся для последующего вывода разом */
    $syserr = implode(';',$user->_errors);
    $err .= JText::sprintf('COM_AIMFO_ERROR_IMPORT_CREATERUSER',$item_login,$item_pss,$item_email,$item_name,$syserr);
    $e++;
} else {
    $userid = $user->id;
}
*

dm-krv

  • Завсегдатай
  • 1028
  • 28 / 0
Щх, нихренассе вспомнил ))) я этим занимался в декабре 14-го года, 4,5 года назад )))

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


Да, забавно) У меня пользователь нормально создается, с авторизацией тоже проблем нет, а вот письмо на почту не приходит, но раз у тебя все нормально, вероятно дело действительно в том, что я в отдельном файле все делаю.

Эх, ладно. Придется вручную отсылать, мне для безопасности нужно все в отдельном файле делать. Спасибо за ответ)
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Привет, подскажи, у тебя опция sendEmail работает? У меня при создании пользователя отчего-то письмо не уходит.
sendEmail - это опция для админа, чтобы получать системные сообщения, а не для отправки письма при создании юзера. Письмо уходит только в случае, когда создается новый юзер и включен параметр отправки письма в плагине Joomla.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

dm-krv

  • Завсегдатай
  • 1028
  • 28 / 0
sendEmail - это опция для админа, чтобы получать системные сообщения, а не для отправки письма при создании юзера. Письмо уходит только в случае, когда создается новый юзер и включен параметр отправки письма в плагине Joomla.

Вот оно что, теперь все ясно. В общем то запилил отправку пароля сам, все норм.
*

web3.0

  • Захожу иногда
  • 348
  • 6 / 6
Вернусь к вопросу. Как получить логин и пароль пользователя?
« Последнее редактирование: 18.04.2020, 15:12:22 от web3.0 »
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Вернусь к вопросу. Как получить логин и пароль пользователя?
Непонятно, куда вы возвращаетесь. Получить инфо можно в БД, зная ID, но сам пароль вы не получите - только его хеш.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

web3.0

  • Захожу иногда
  • 348
  • 6 / 6
Есть логин. Как можно проверить наличие пользователя с таким же логином в базе и в случае успеха получить пароль (хеш) этого пользователя.
*

SeBun

  • BanMaster
  • 4018
  • 259 / 5
  • @SeBun48
Есть логин. Как можно проверить наличие пользователя с таким же логином в базе и в случае успеха получить пароль (хеш) этого пользователя.

Сделать запрос вида
Код
 SELECT 'password' FROM 'myprefix_users' WHERE 'username'="myuserlogin";
Оказываю услуги по Joomla | Миграция/Обновление | Сопровождение | IT-аутсорсинг | Недорогие домены и хостинг
*

web3.0

  • Захожу иногда
  • 348
  • 6 / 6
Если из ВК, к примеру, пользователь входит на сайт, то какой нужно задавать пароль?
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Сгенерируйте ему пароль, сам поменяет потом, если захочет.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

web3.0

  • Захожу иногда
  • 348
  • 6 / 6
Пароль оказался проблемой.
При обычном входе (не с регистрацией) проверяется наличие пользователя и его пароля:
Код
$credentials = array( 'username'=>$username, 'password'=>$password );
$options = array( 'remember'=>true );
Возможно сделать проверку только логина без пароля?
*

SeBun

  • BanMaster
  • 4018
  • 259 / 5
  • @SeBun48
Пароль оказался проблемой.
При обычном входе (не с регистрацией) проверяется наличие пользователя и его пароля:
Код
$credentials = array( 'username'=>$username, 'password'=>$password );
$options = array( 'remember'=>true );
Возможно сделать проверку только логина без пароля?
Я с трудом понимаю, что вы хотите сделать. Для чего выложили здесь два массива, какую они могут дать информацию для решения вашей проблемы? Что вы хотите сделать с паролем?

В фильме про Гарри Поттера классно передана человеческая сущность - главное, захотеть и суметь сформулировать, что хочешь, остальное сделает волшебная палочка. Здесь такого нет, здесь четкая логика, четкий алгоритм действий, четкие задачи. Поэтому, если нет в вопросе конкретики, то все, что вам могут посоветовать - учиться нормально формулировать свои вопросы.

По сабжу: есть таблица #__users, которая содержит все данные пользователя, а именно - требуемую пару логин/пароль. Есть еще две таблицы: #__usergroups, которая содержит группы, и #__user_usergroup_map, где прописано сопоставление пользователь=группа. Все, больше никакими таблицами вам оперировать не надо. Как проверить логин я писал выше - делаете простой запрос в базу. Получать пароль, или точнее хеш пароля, бессмысленно в вашем случае. Единственное, где этот хеш может использоваться - это при проверке пароля, когда от пользователя приходит строка пароля, к ней добавляется соль, генерируется хеш и сверяется с тем, что имеется в базе. Если хеши не совпадают - пароль неверный. Все. Забудьте про поле пароля, оно вам больше никак не понадобится. Вы можете лишь установить свой пароль, сгенерировав его средствами Joomla либо указав тип кодирования MD5.

Код
INSERT INTO 'myprefix_users' ('name', 'username', 'email', 'password', 'requireReset') 
VALUES ('test', 'test name', 'nomail@nomail.no', MD5('12345'), '1');

Этот запрос создаст нового пользователя с логином test и паролем 12345. В последнее поле requireReset прописывам 1, это будет означать, что при первой авторизации вашего пользователя ему будет предложено сменить пароль.

Все, больше я не знаю, чем вам помочь, т.к. не понимаю задачу, которую вы пытаетесь решить - слишком много неизвестных.
« Последнее редактирование: 20.04.2020, 02:44:57 от SeBun »
Оказываю услуги по Joomla | Миграция/Обновление | Сопровождение | IT-аутсорсинг | Недорогие домены и хостинг
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Не будь паразитом, сделай что-нибудь самостоятельно!
*

web3.0

  • Захожу иногда
  • 348
  • 6 / 6
Получать пароль, или точнее хеш пароля, бессмысленно в вашем случае. Единственное, где этот хеш может использоваться - это при проверке пароля, когда от пользователя приходит строка пароля, к ней добавляется соль, генерируется хеш и сверяется с тем, что имеется в базе. Если хеши не совпадают - пароль неверный.
Как сверить пароль?
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Сказали же
Если хеши не совпадают - пароль неверный.
Что тут непонятного?
Не будь паразитом, сделай что-нибудь самостоятельно!
*

web3.0

  • Захожу иногда
  • 348
  • 6 / 6
Туплю. Как сгенерировать хеш пароля?
*

SeBun

  • BanMaster
  • 4018
  • 259 / 5
  • @SeBun48
Туплю. Как сгенерировать хеш пароля?
Какой хеш? Я написал, что их два варианта. Стандартный жумловский SHA и устаревший MD5. В зависимости от того, как реализована у вас логика, создаете пароль, который вам нужен.

Вот вам код:
Код
$crypt = JUserHelper::getCryptedPassword($pass, $salt);

Вот вам док: doc по этому коду.
Вот вам сам класс JUserHelper для разбора полетов: JUserHelper
Вот вам ссылка с обсуждением генерации пароля.

Короче, алгоритм выглядит так: пользователю отправляется форма, где он должен ввести логин и пароль. Он заполняет форму и отправляет. Далее делается запрос в базу, где по логину осуществляется поиск пользователя, получаем обратно пароль (хеш). Далее работает программный код. Он берет пароль, полученный из формы, присланной пользователем, добавляет к нему соль и формирует хеш. И наконец сравнивает хеш, полученный из базы, с тем, что получилось. Вот так работает проверка.
« Последнее редактирование: 20.04.2020, 14:00:47 от SeBun »
Оказываю услуги по Joomla | Миграция/Обновление | Сопровождение | IT-аутсорсинг | Недорогие домены и хостинг
*

web3.0

  • Захожу иногда
  • 348
  • 6 / 6
SeBun, спасибо за фолиант, одна ссылка оказалась решающей проблему.
День убил на понимание нюансов хеша.
robert, спс за терпение.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Условия вывода блока div, поля пользователя?

Автор warlocksp

Ответов: 28
Просмотров: 560
Последний ответ 10.12.2020, 14:05:36
от gartes
Выбор группы пользователя при регистрации (аутентификации)

Автор Bartleby

Ответов: 10
Просмотров: 1710
Последний ответ 05.06.2013, 14:20:36
от Bartleby