Tickets. Фоновая регистрация
Василий, доброго времени суток.
Возможно ли выложить в публичный доступ решение для фоновой регистрации пользователей,
которое вы использовали на сайте amd2013.ru?
Возможно ли выложить в публичный доступ решение для фоновой регистрации пользователей,
которое вы использовали на сайте amd2013.ru?
Комментарии: 5
Да это не то, чтобы решение, просто свой процессор для создания юзеров:
Он не требует никаких прав для работы (см. переменную $permission), поэтому запускать его может кто угодно.
<?php
require MODX_CORE_PATH . 'model/modx/processors/security/user/create.class.php';
class UserCreateProcessor extends modUserCreateProcessor {
public $classKey = 'modUser';
public $languageTopics = array('user');
public $permission = '';
public $objectType = 'user';
public $beforeSaveEvent = 'OnBeforeUserFormSave';
public $afterSaveEvent = 'OnUserFormSave';
public function beforeSet() {
if (!$this->getProperty('email')) {
return $this->addFieldError('email', $this->modx->lexicon('field_required'));
}
if (!$this->getProperty('username')) {
return $this->addFieldError('username', $this->modx->lexicon('field_required'));
}
$this->setProperty('passwordnotifymethod', 's');
$this->setProperty('passwordgenmethod', 'spec');
$this->setProperty('specifiedpassword', md5($this->getProperty('email')));
$this->setProperty('confirmpassword', md5($this->getProperty('email')));
$this->setProperty('groups', '[{"usergroup":"2","role":"1"]}');
$this->setProperty('active', false);
return parent::beforeSet();
}
}
return 'UserCreateProcessor';
Он не требует никаких прав для работы (см. переменную $permission), поэтому запускать его может кто угодно.
$response = $this->runProcessor('web/user/create', array(
'username' => $email
,'email' => $email
,'fullname' => $email
));
Василий, а при таком подходе проверка на правильность email'а самим modx'ом осуществляется, не подскажешь?
Или надо самому валидацию мыла делать?
Или надо самому валидацию мыла делать?
Правильность самого мыла — нет.
Проверка идёт только на заполнение и дубликаты. Вот исходный код валидатора.
Проверка идёт только на заполнение и дубликаты. Вот исходный код валидатора.
Понял, спасибо!
Василий, помоги понять, что не работает. Взял твой процессор UserCreateProcessor и выполняю его:
$email='123@123.ru';
$fields=array('username'=>'Name','email' => $email,'fullname' => $email);
$response = $modx->runProcessor('web/staff/createUser',$fields,array('processors_path' => $modx->getOption('core_path').'components/staff/processors/'));
if (!$response->isError()) {
print_r($response->response);
}else {
$modx->log(modX::LOG_LEVEL_ERROR, $response->getMessage());
}
На выходе получаю ($response->response) UserCreateProcessor
Пользователь не создается. Но и response ничего не выводит кроме названия класса. Даже если я генерирую ошибку в BeforeSet() или в initialize() возвращаю false, все равно получаю UserCreateProcessor. По исходникам пробежался, не могу понять, что не так. Нужна помощь доктора.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.