Воcстановление пароля в MODX Revolution

Опубликовано: 02 Ноя 2014

Часто в MODX Revolution нужно востановить пароль, при этом возможно, что MODX не хочет отправлять сообщение на почту, указанную при регистрации пользователя. Воспользуемся тогда PhpMyAdmin для того, чтобы задать нужный пароль и войти в менеджер. Найдём таблицу modx_users в нашей базе данных.
Найдём нашего пользователя (у меня admin и только один пользователь, у вас их может быть много больше) и прокрутим чуть вправо для определения алгоритма шифрования пароля - колонка hash_class. Сейчас это hashing.modPBKDF2, для версий до 2.1 это hashing.modMD5. Если алгоритм шифрования MD5, то можно его сгенерировать с помощью онлайн генератора и изменить тут же значение на сгенерированное. Если же у вас hash_class - hashing.modPBKDF2, то нужно его поменять на hashing.modMD5 и сделать то же самое. Ниже приведены способы как можно сделать это же при помощи SQL запросов к Базе данных:

Востановление пароля для MODX Revolution 2.1+

Для тех у кого версия 2.1 и выше выполняем запрос к БД:

UPDATE modx_users SET hash_class = 'hashing.modMD5', password = MD5('the-new-password') WHERE username = 'theusername';

Если вы хотите, чтобы пароль пользователя автоматически отконвертировался обратно в PBKDF2, то вы можете установить pbkdf2Convert плагин из Управления дополнениями (Package Management).

Востановление пароля для MODX Revolution 2.0.X

Для тех у кого версия MODX Revolution 2.0.X и hash_class = 'hashing.modMD5', то запрос будет:

UPDATE modx_users SET password = MD5('the-new-password') WHERE username = 'theusername';

Востановление пароля через MODX Api

Можно сбросить пароль используя API. Ниже приведен скрипт для обновления пароля и емейла пользователя. Также скрипт назначает группу пользователя - Администраторы (Administrator User Group).

<?php
define('MODX_API_MODE', true); // Gotta set this one constant.
 // Сбрасывает пароль и email существующего пользователя
// и задаёт его группу
$username = 'theusername';
$password = 'newpassword';
$email = 'new@email.com';
 $user_group = 1; // 1 для Administrator
 // полный путь к MODX index.php файлу
require_once('/full/path/to/index.php');
 // ====== Не изменяйте ничего ниже этой линии ======
if (empty($username) || empty($password) || empty($email)) {
    die('ERROR: Missing criteria.');
}
$modx= new modX();
$modx->initialize('mgr');
 $query = $modx->newQuery('modUser');
$query->where( array('username'=>$username) );
$user = $modx->getObjectGraph('modUser', '{ "Profile":{}, "UserGroupMembers":{} }', $query);
// print_r($user); exit;
if (!$user) {
    die("ERROR: No user with username $username");
}
 $user->set('username',$username);
$user->set('active',1);
$user->set('password', $password);
$user->Profile->set('email', $email);
$user->Profile->set('blocked', 0);
$user->Profile->set('blockeduntil', 0);
$user->Profile->set('blockedafter', 0);
 // Проверка, что пользователь является членом User Group
$is_member = false;
if (!empty($user->UserGroupMembers)) {
    foreach ($user->UserGroupMembers as $UserGroupMembers) {
        if ($UserGroupMembers->get('user_group') == $user_group) {
            $is_member = true;
            break;          
        }
    }
}
// Добавляет Пользователя к Группе пользователя (User Group) если он не является её членом
if (!$is_member) {
    // Проверка существования группы пользователя
    $UserGroup = $modx->getObject('modUserGroup', $user_group);
    if (!$UserGroup) {
        die ("ERROR: User Group $user_group does not exist.");
    }
 
    $Member = $modx->newObject('modUserGroupMember');
    $Member->set('user_group', $user_group);
    $Member->set('member', $user->get('id'));
    // Super User = role 2
    $Member->set('role', 2);
    $Member->set('rank', 0);
    $user->addOne($Member,'UserGroupMembers');
}
 /* сохранение пользователя */
if (!$user->save()) {
    die('ERROR: Could not save user.');
}
 print "SUCCESS: User $username updated.";
?>

Внимание! Будьте предельно внимательны при использовании скрипта такого типа, не ложите его в корень сайта - лучше разместите его вне вашего корня и запускайте скрипт с помощью коммандной строки.

Разблокировка пользователя


Может возникнуть ситуация, когда пользователь часто вводил неправильный пароль и был заблокирован, тогда нужно зайти в таблицу modx_user_attributes и в колонке blocked изменить 1 на 0, то есть разблокировать пользователя:

Комментарии (0)


Оставить комментарий




Разрешённые теги: <b><i><br>Добавить новый комментарий: