Залогинить пользователя по id
Здравствуйте! В modx совсем недавно, поэтому извините, если что.
На примере статьи modx.pro/development/3156-processors-in-modx/ реализован вход с использованием данного процессора:
Возможно ли (и как по уму?) осуществить вход пользователя по его id (без ввода пароля) в контексте web?
Для примера, на вордпрессе есть функция wp_set_current_user, которая позволяет изменить ID текущего пользователя. Есть ли что-то подобное на modx?
На примере статьи modx.pro/development/3156-processors-in-modx/ реализован вход с использованием данного процессора:
$modx->runProcessor('/security/login', $data);
Но в данном процессоре использование пароля обязательно. Возможно ли (и как по уму?) осуществить вход пользователя по его id (без ввода пароля) в контексте web?
Для примера, на вордпрессе есть функция wp_set_current_user, которая позволяет изменить ID текущего пользователя. Есть ли что-то подобное на modx?
Комментарии: 5
Посмотрите. что происходит в процессоре /security/login, и попробуйте сделать тоже самое кроме сравнения паролей.
К комментарию выше
на 145 строке github.com/modxcms/revolution/blob/master/core/model/modx/processors/security/login.php#L145 есть интересное условие, внутри которого проверяется пароль. А повлиять на условие, судя по коду, можно в плагине на события OnManagerAuthentication или OnWebAuthentication
на 145 строке github.com/modxcms/revolution/blob/master/core/model/modx/processors/security/login.php#L145 есть интересное условие, внутри которого проверяется пароль. А повлиять на условие, судя по коду, можно в плагине на события OnManagerAuthentication или OnWebAuthentication
Да, именно так, можно просто вернуть true и проверки по паролю не будет.
внутри данного события разработчик может проверить переданные параметры, что заменит обычную проверку пароля и позволит продолжить процесс входа.
OnWebAuthentication || OnManagerAuthentication — Inside this event the developer can check for parameters which will override the default checking by password and allow further logging in process.Перевод:
внутри данного события разработчик может проверить переданные параметры, что заменит обычную проверку пароля и позволит продолжить процесс входа.
Можно попробовать так:
$modx->user = $modx->getObject('modUser', 15);
$modx->user->addSessionContext('web');
Спасибо всем за ответы и наводку. Догадывался, что можно что-то сделать с процессором /security/login, но не знал как. Задачу также осложняла необходимость упаковать это всё в дополнение (в топике не упоминал об этом).
Нашел решение такое:
— дублировал файл login.php, убрав проверки, которые возвращали ошибки при отсутствии пароля;
— разместил получившийся файл в папке _build в model/proj/processors/security/login.php;
— изменил вызов процессора, указав в переменной $processors_path путь до папки processors:
Нашел решение такое:
— дублировал файл login.php, убрав проверки, которые возвращали ошибки при отсутствии пароля;
— разместил получившийся файл в папке _build в model/proj/processors/security/login.php;
— изменил вызов процессора, указав в переменной $processors_path путь до папки processors:
$modx->runProcessor('/security/login', $data, array('processors_path' => $processors_path));
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.