Проблемы с получением пользователя через процессор
Всем привет, следующая проблема:
через процессор нужно получить айди пользователя. Пробовал логиниться и через Login, и через свой плагин, но
Подскажите, плз, как можно получить пользователя, залогиненого через фронтенд?
через процессор нужно получить айди пользователя. Пробовал логиниться и через Login, и через свой плагин, но
$this->modx->user->get('id');всегда возвращает ноль. При этом на фронтенде все данные пользователя отображаются правильно. Логиню пользователя и в web, и в mgr, но процессор все равно пользователя не видит, хотя
$this->modx->context->get('key');возвращает web. А вот если я логинюсь в админку, то процессор возвращает того пользователя, который залогинен в админку. При этом не важно, залогинен ли пользователь во фронтенд.
Подскажите, плз, как можно получить пользователя, залогиненого через фронтенд?
Комментарии: 9
Нужен код процессора. Без него даже экстрасенсы не помогут…
Ну и желательно код вызова процессора (и рассказать, где конкретно процессор вызывается — в плагине, в PHP-файле, в сниппете?)
Ну и желательно код вызова процессора (и рассказать, где конкретно процессор вызывается — в плагине, в PHP-файле, в сниппете?)
Ну вот даже в таком варианте происходит то, что описано в первом посте
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' => '',
));
Когда пользователь открывает PHP-файл, контекста нет. Вам нужно вручную сначала инициализировать контекст, наверное.
Вот пример: github.com/bezumkin/pdoTools/blob/master/assets/components/pdotools/connector.php
Вот пример: github.com/bezumkin/pdoTools/blob/master/assets/components/pdotools/connector.php
Но
в коннекторе возвращает web, а вот пользователя в том же месте нет, так же, как и в процессоре.
Пойду посмотрю пример, спасибо
$modx->context->get('key')
в коннекторе возвращает web, а вот пользователя в том же месте нет, так же, как и в процессоре.
Пойду посмотрю пример, спасибо
Пробую вручную
И он уже в контроллере не видит, что пользователь залогинен во фронтенд
Впечатление, что существують параллельно два объекта пользователя.
Но даже если я вручную загружаю нужного пользователя в коннекторе
$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, если пользователь в менеджере.
Я нашел, в чем проблема! В мультиязычности сайта. Есть два контекста, управляет babel. Одна версия сайта www.mysite.com/en/, вторая www.mysite.com/de/. Если я настраиваю так, чтобы одна из версий работала прочто как www.mysite.com — то в таком виде все начинает работать. Пользователь грузится, все ок.
Пока не могу придумать, как заставить работать. Может есть идеи?
Пока не могу придумать, как заставить работать. Может есть идеи?
Так, стоп, я сейчас снова настроил все, как было до этого, и все работает… похоже просто какой-то глюк был… Но все равно, может есть какие-то идеи, в чем может быть причина?
Вылогинился и снова залогинился, и снова не работает ((( что происходит?
Короче, когда я захожу через фронтенд, то сессия вешается именно на путь, через который заходил. Например /en/ а к файлу коннектора я обращаюсь без этого пути, вот у него и нет никакой сессии. Можно как-то сделать так, чтобы сессия работала на весь фронтенд?
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.