Войти в аккаунт пользователя без пароля Решено

Дополнение: Login

Всем привет!
Ситуация следующая: через сниппет Login (стандартный) ранее были зареганы несколько пользователей. Затем регистрация новых пользователей прекратилась. Теперь заказчик хочет, чтобы зареганные клиенты могли входить только по email.
Если отбросить вопросы безопасности, то как это можно сделать?
В сниппете, который начал писать использую конструкцию
$user = $modx->getObject('modUser', array(
    'username' => $username,
    ));
$response = $modx->runProcessor('security/login', array(
    'username' => $username,
    'password' => $password,
    'login_context' => 'web',
    'add_contexts' => 'web',
    'rememberme' => true,
    'service' => 'login'
        ));
Где $username беру из $_POST, а $password временно использую реальный (просто, чтоб проверить, что процессор работает).
Итак, что нужно изменить (если флаг, то какой и где) в процессоре Модх логин, чтобы я мог позволить пользователю автоматически входить в свой аккаунт по email?
15 августа 2017, 10:34    Илья Гурешидзе   
0    166 0

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

  1. Илья Гурешидзе 15 августа 2017, 12:22 # +1
    В принципе, вполне подходит следующий вариант (aka костыль): чтобы юзать стандартный механизм сниппета Логин можно просто в базе у всех пользователей, кроме админа заменить пароль на некий общий мастер-пароль и тупо подставлять его в форме при наборе пользователем своего мыла. Билет в один конец, разумеется и нужен бекап базы клиентов, на случай " Вы знаете, а верните как было". Но поскольку новых клиентов больше через сайт не зарегается то все норм.
    1. Павел Гвоздь 15 августа 2017, 12:32 # +1
      Вот здесь изучите второй вариант, который предложил Илья Уткин.
      1. Илья Гурешидзе 15 августа 2017, 12:55 # 0
        Благодарю, код действительно нужный для сохранения, однако он не совсем по моей задаче.
        1. Александр 15 августа 2017, 13:17 # +2
          if (!$modx->user->isAuthenticated('web') && ($user = $modx->getObject('modUser', array('username' => $_POST['username'])))) {
              $user->addSessionContext('web');
          }
          return ;
          
          1. Илья Гурешидзе 15 августа 2017, 14:28 # 0
            Александр, благодарю, но я уже пробовал ранее сам подобный код и он не сработал
            1. Александр 15 августа 2017, 14:37 # 0
              у меня прекрасно работает
              1. Илья Гурешидзе 15 августа 2017, 14:57 # 0
                Александр, прошу прощения, указал не тот контекст. Сработало. Спасибо, большое!
            2. Сергей Шлоков 16 августа 2017, 07:29 # +1
              if (is_guest()) login($_POST['username']);
        Вы должны авторизоваться, чтобы оставлять комментарии.