Залогинить пользователя по id

Здравствуйте! В modx совсем недавно, поэтому извините, если что.

На примере статьи modx.pro/development/3156-processors-in-modx/ реализован вход с использованием данного процессора:
$modx->runProcessor('/security/login', $data);
Но в данном процессоре использование пароля обязательно.

Возможно ли (и как по уму?) осуществить вход пользователя по его id (без ввода пароля) в контексте web?

Для примера, на вордпрессе есть функция wp_set_current_user, которая позволяет изменить ID текущего пользователя. Есть ли что-то подобное на modx?
Антон
05 ноября 2014, 09:20
modx.pro
2 471
0

Комментарии: 5

Алексей Ерохин
05 ноября 2014, 14:22
0
Посмотрите. что происходит в процессоре /security/login, и попробуйте сделать тоже самое кроме сравнения паролей.
    Наумов Алексей
    05 ноября 2014, 14:37
    0
    К комментарию выше

    на 145 строке github.com/modxcms/revolution/blob/master/core/model/modx/processors/security/login.php#L145 есть интересное условие, внутри которого проверяется пароль. А повлиять на условие, судя по коду, можно в плагине на события OnManagerAuthentication или OnWebAuthentication
      Алексей Ерохин
      05 ноября 2014, 15:41
      0
      Да, именно так, можно просто вернуть 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.
      Перевод:
      внутри данного события разработчик может проверить переданные параметры, что заменит обычную проверку пароля и позволит продолжить процесс входа.
      Василий Наумкин
      05 ноября 2014, 18:10
      1
      0
      Можно попробовать так:
      $modx->user = $modx->getObject('modUser', 15);
      $modx->user->addSessionContext('web');
        Антон
        05 ноября 2014, 21:06
        0
        Спасибо всем за ответы и наводку. Догадывался, что можно что-то сделать с процессором /security/login, но не знал как. Задачу также осложняла необходимость упаковать это всё в дополнение (в топике не упоминал об этом).
        Нашел решение такое:
        — дублировал файл login.php, убрав проверки, которые возвращали ошибки при отсутствии пароля;
        — разместил получившийся файл в папке _build в model/proj/processors/security/login.php;
        — изменил вызов процессора, указав в переменной $processors_path путь до папки processors:
        $modx->runProcessor('/security/login', $data, array('processors_path' => $processors_path));
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          5