Сниппет регистрации юзера [РЕШЕНО]
Добрый вечер! есть сниппет, который вроде бы и выполняется, но в эррор лог пишется только ошибка при создании пользователя [2012-11-30 19:40:57] (ERROR @ /index.php) register user error. Username: 8901008031, Message:
Ну и пользователи не создаются… Прошу наставить на путь истинный.
<?php
$modx->addPackage('leleko-cdb', $modx->getOption('core_path').'components/leleko-cdb/model/','modx_leleko_');
$users_data_arr = $modx->getCollection('CdbOrg');
foreach($users_data_arr as $usr_data) {
$username = $usr_data->get('inn');
$password = $usr_data->get('passwd');
}
$new_users_arr = array(
'username' => '$username',
'password' => '$password'
);
$write_usr_data = $modx->runProcessor('/security/user/create', $new_users_arr);
if ($write_usr_data->isError()) {
$modx->log(modX::LOG_LEVEL_ERROR, 'register user error. Username: '.$username.', Message: '.$write_usr_data->getMessage());
}
Комментарии: 9
У вас тут грубые ошибки
Должно быть как-то так:
Должно быть как-то так:
<?php
$modx->addPackage('leleko-cdb', $modx->getOption('core_path').'components/leleko-cdb/model/','modx_leleko_');
$users_data_arr = $modx->getCollection('CdbOrg');
foreach ($users_data_arr as $usr_data) {
$username = $usr_data->get('inn');
$password = $usr_data->get('passwd');
$write_usr_data = $modx->runProcessor('/security/user/create', array(
'username' => $username,
'password' => $password
));
if ($write_usr_data->isError()) {
$modx->log(modX::LOG_LEVEL_ERROR, 'register user error. Username: '.$username.', Message: '.$write_usr_data->getMessage());
}
}
Спасибо большое! Теперь хотя бы пользователи пытаются все создаться… Щас буду смотреть в чем именно ошибка при создании и почему она пустая.
Нашел вот какой момент, пользователи не регистрировались пока не внес такие изменения:
foreach ($users_data_arr as $usr_data) {
$username = $usr_data->get('inn');
$org_name = $usr_data->get('organization');
$password = $usr_data->get('passwd');
$response = $modx->runProcessor('/security/user/create', array(
'username' => $username,
'fullname' => $org_name,
'email' => 'test@com.ru',
'newpassword' => TRUE,
'specifiedpassword' => $password,
'confirmpassword' => $password,
'passwordnotifymethod' => 'e'
));
И 3 пользователя на ура создаются!!! Правда только 3 и дальше ошибки пишутся в лог но ошибка пустая также, так что теперь я в замешательстве… Почему же 3 пользователя все-таки создаются? Значит решение работает но чего-то не хватает толи памяти толи времени выполнения.
совсем забыл что есть пользователи с 0000000000 вместо уникального номера, которых мне обрабатывать не нужно. Видимо как раз при попытке создать второго пользователя с таки же логином и выдается ошибка и дальнейшее создание пользователей уже не происходит.
Если не хватает времени или памяти, попробуйте такое решение — пусть создает по три пользователя за запрос.
Ваше решение пока не пробовал ибо не разобрался до конца, но максимум чего удалось достигнуть так это регистрации 137 пользователей (всего 390). И в эррор логе системы пусто не могу понять чего не хватает.
Долго ковырял создание через процессор, в итоге выяснил что пользователи не все создаются и время работы скрипта затягивается до отсечки изза того что каждому пользователю пытаются отправится еmail собщения с паролем. Пробовал
Так что решение какое-то полурабочее получилось.
Единственное что нашел тут вариант создания пользователя через апи. Пользователи создаются на лету, но не получается их добавить в группу сразу же из сниппета. Надеюсь с этим разобраться.
'passwordnotifymethod' => 'e'
выставить 'passwordnotifymethod' => 's'
, но в таком случае создается только 1 пользователь, а информация о том что созданы все остальные только падает в эррор лог modx.Так что решение какое-то полурабочее получилось.
Единственное что нашел тут вариант создания пользователя через апи. Пользователи создаются на лету, но не получается их добавить в группу сразу же из сниппета. Надеюсь с этим разобраться.
Да, я помню в свое время долго ломал голову, пока не добрался до этого пресловутого 'passwordnotifymethod' :) Сожалею, что не увидел ваш вопрос вовремя. Тем не менее, пару моментов все же отмечу:
Для начала корректно обрабатываем ошибки при регистрации:
Далее. Добавление в группу при регистрации тоже простое:
Надеюсь, помог :) Ибо сам буквально недавно «варился» в этом очень основательно :)
Для начала корректно обрабатываем ошибки при регистрации:
// Запускаем стандартный процессор регистрации
$response = $this->modx->runProcessor( 'security/user/create', $options );
if ( $response->isError() ) {
// Получаем весь набор ошибок (например, не задано имя пользователя, пустой пароль и т.д.)
$errors = $response->response['errors'];
foreach ( $errors as $error ) {
$errorMsg = $error['msg'];
// Выводим сообщение об ошибке в лог или плейсхолдер
}
}
else {
// А здесь все замечательно, получаем массив
// с параметрами пользователя (не объект типа modUser!)
$userArray = $response->getObject();
}
Далее. Добавление в группу при регистрации тоже простое:
// Получаем идентификаторы групп и ролей, используемых по умолчанию
// Группу Registered заменить на нужную (она должна быть заранее создана!)
$group = $this->modx->getObject( 'modUserGroup', array( 'name' => 'Registered' ) );
$userGroup = $group->get( 'id' );
$role = $this->modx->getObject( 'modUserGroupRole', array( 'name' => 'Member' ) );
$userRole = $role->get( 'id' );
...
// При вызове процессора обратите внимание на второй параметр - $options.
// В него нужно добавить следующий элемент:
$options['groups'] = array( array( 'usergroup' => $userGroup , 'role' => $userRole ) );
// По аналогии можете созданного пользователя добавлять сразу в несколько групп с различными ролями
Надеюсь, помог :) Ибо сам буквально недавно «варился» в этом очень основательно :)
Алексей, спасибо большое за предложенное решение! обязательно им воспользуюсь.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.