Проблемы с получением пользователя через процессор

Всем привет, следующая проблема:

через процессор нужно получить айди пользователя. Пробовал логиниться и через Login, и через свой плагин, но

$this->modx->user->get('id');
всегда возвращает ноль. При этом на фронтенде все данные пользователя отображаются правильно. Логиню пользователя и в web, и в mgr, но процессор все равно пользователя не видит, хотя

$this->modx->context->get('key');
возвращает web. А вот если я логинюсь в админку, то процессор возвращает того пользователя, который залогинен в админку. При этом не важно, залогинен ли пользователь во фронтенд.

Подскажите, плз, как можно получить пользователя, залогиненого через фронтенд?
dopeless
19 февраля 2019, 01:49
modx.pro
748
0

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

Илья Уткин
19 февраля 2019, 12:38
0
Нужен код процессора. Без него даже экстрасенсы не помогут…

Ну и желательно код вызова процессора (и рассказать, где конкретно процессор вызывается — в плагине, в PHP-файле, в сниппете?)
    dopeless
    19 февраля 2019, 13:02
    0
    Ну вот даже в таком варианте происходит то, что описано в первом посте

    class MyCustomProceesor extends modObjectProcessor {
    	public function checkPermissions() {
    		echo  $this->modx->user->get('id');
    		return false;
        }
        public function process() {
    
    	}
    }
    return 'MyCustomProceesor';
    Вызываю через php файл

    $modx->request->handleRequest(array(
    	'processors_path' => $processorpath,
    	'location' => '',
    ));
      Илья Уткин
      19 февраля 2019, 13:20
      0
      Когда пользователь открывает PHP-файл, контекста нет. Вам нужно вручную сначала инициализировать контекст, наверное.

      Вот пример: github.com/bezumkin/pdoTools/blob/master/assets/components/pdotools/connector.php
        dopeless
        19 февраля 2019, 13:34
        0
        Но
        $modx->context->get('key')

        в коннекторе возвращает web, а вот пользователя в том же месте нет, так же, как и в процессоре.

        Пойду посмотрю пример, спасибо
          dopeless
          19 февраля 2019, 15:31
          0
          Пробую вручную

          $modx->switchContext('web');
          ничего не дает. Но контроллер и так в контексте web работает.
          И он уже в контроллере не видит, что пользователь залогинен во фронтенд

          $modx->user->hasSessionContext('mgr')
          возвращает true, если пользователь в админке. А в фронтенд контекстах он пользователя не видит, в независимости от того, залогинен он или нет. Так же само, как он не видит, если я вручную логиню пользователя в конектс mgr. Пока пользователь не залогинен в менеджер, все контексты возвращають false.

          Впечатление, что существують параллельно два объекта пользователя.

          Но даже если я вручную загружаю нужного пользователя в коннекторе

          $user = $modx->getObject('modUser', 1);
          trigger_error('user has context: '.$user->hasSessionContext('mgr'), E_USER_WARNING);
          Все равно он видит только контекст mgr, если пользователь в менеджере.
          dopeless
          19 февраля 2019, 21:33
          0
          Я нашел, в чем проблема! В мультиязычности сайта. Есть два контекста, управляет babel. Одна версия сайта www.mysite.com/en/, вторая www.mysite.com/de/. Если я настраиваю так, чтобы одна из версий работала прочто как www.mysite.com — то в таком виде все начинает работать. Пользователь грузится, все ок.

          Пока не могу придумать, как заставить работать. Может есть идеи?
            dopeless
            19 февраля 2019, 21:36
            0
            Так, стоп, я сейчас снова настроил все, как было до этого, и все работает… похоже просто какой-то глюк был… Но все равно, может есть какие-то идеи, в чем может быть причина?
              dopeless
              19 февраля 2019, 21:37
              0
              Вылогинился и снова залогинился, и снова не работает ((( что происходит?
                dopeless
                19 февраля 2019, 21:58
                0
                Короче, когда я захожу через фронтенд, то сессия вешается именно на путь, через который заходил. Например /en/ а к файлу коннектора я обращаюсь без этого пути, вот у него и нет никакой сессии. Можно как-то сделать так, чтобы сессия работала на весь фронтенд?
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      9