XenForo 2.x.x Как сделать хук или триггер функции из фодуля на событие юзер Авторизован

dimsim

Участники
Сообщения
64
Реакции
4
Баллы
65
Сделаю модуль примерно такой:

Код:
namespace XenIMCentral\IMIntegration\Pub\Controller;


use XF\Pub\Controller\AbstractController;

class xIMCart extends AbstractController {

  public function actionStartSelling() {

    if (\XF::visitor()->user_id == 0) {

      return $this->redirect($this->buildLink('login'));

    }
    
    $id = \XF::visitor()->user_id;

    error_log('user '.$id.' авторизовывался');

    exit;

  }
}

Как и где что сделать чтобы моя функция actionStartSelling() срабатывала если юзер залогинился (и/или зарегался и успешно авторизовался)

Буду рад помощи, отблагодарю.
 
Такого события нет, тут надо наследоваться от классов движка. В Вашем случае, нужен XF\ControllerPlugin\Login и метод completeLogin(). Он и при реге вызывается.
 
Такого события нет, тут надо наследоваться от классов движка. В Вашем случае, нужен XF\ControllerPlugin\Login и метод completeLogin(). Он и при реге вызывается.
Привет, ОК. То есть это addon?
 
Вы думаете кто-то понял, что вы написали и что вы имели в виду?
ну наследоваться можно по-разному - из вне и из внутри аддоном, так? Как правильно наследование сделать и внутри прописать вызов actionStartSelling ?
 
Создаёте файлик вида:
PHP:
<?php

namespace MyForumExtensions\XF\ControllerPlugin;

class Login extends XFCP_Login
{
    public function completeLogin(\XF\Entity\User $user, $remember)
    {
        parent::completeLogin($user, $remember); // это чтобы код движка отработал
        // код, который должен выполниться после авторизации
    }
}
Располагаете его в папке src/addons/MyForumExtensions/XF/ControllerPlugin, и в админке создаёте расширение класса.
Базовый класс: XF\ControllerPlugin\Login
Итоговый класс (не помню, как оно там вообще написано, а раскатывать локалку лень): MyForumExtensions\XF\ControllerPlugin\Login
Приоритет любой, но желательно не дефолт (с ним есть артефакты, как выяснилось). Оставляете включенным, сохраняете.
Если код в файле набран правильно, вас перебросит на страницу со всеми расширениями классов, в противном случае выведет ошибку, что класс-то невалидный.
 
Создаёте файлик вида:
PHP:
<?php

namespace MyForumExtensions\XF\ControllerPlugin;

class Login extends XFCP_Login
{
    public function completeLogin(\XF\Entity\User $user, $remember)
    {
        parent::completeLogin($user, $remember); // это чтобы код движка отработал
        // код, который должен выполниться после авторизации
    }
}
Располагаете его в папке src/addons/MyForumExtensions/XF/ControllerPlugin, и в админке создаёте расширение класса.
Базовый класс: XF\ControllerPlugin\Login
Итоговый класс (не помню, как оно там вообще написано, а раскатывать локалку лень): MyForumExtensions\XF\ControllerPlugin\Login
Приоритет любой, но желательно не дефолт (с ним есть артефакты, как выяснилось). Оставляете включенным, сохраняете.
Если код в файле набран правильно, вас перебросит на страницу со всеми расширениями классов, в противном случае выведет ошибку, что класс-то невалидный.

Привет,
сделал как рекомендовано.. если закомментировать строку parent::completeLogin($user, $remember); // это чтобы код движка отработал то соответственно он и не логинит. ОК значит код подхватывается и делаю дальше расширение, вот весь код:
Код:
   public function completeLogin(\XF\Entity\User $user, $remember)
    {
        parent::completeLogin($user, $remember); // это чтобы код движка отработал

        if (\XF::visitor()->user_id == 0) {

            return $this->redirect($this->buildLink('login'));

        }
        $key = 'kjhsd';
        $id = \XF::visitor()->user_id;
        $hash = sha1($key . $id);
        $url = "www.moi-internet-magazin.rus/login.php?&id=" . $id . "&hash=" . $hash;
        header("Location: " . $url);

        exit;

    }

он редиректнул куда мне и надо и на стороне ИМ всё сделалось как оно и написано в скрипте ИМ login.php но когда перехожу на форум - там сессии юзера нет :(

Что не отработало? Или всё отработало но мой редирект прибил сессию и тогда лучше курлом дернуть логин на стороне магазина?

PS хейтерам посмеяться: делал и в инкогнито режиме на всякий случай :)

West14, спасибо тоже только не повезло мне : У Вас недостаточно прав для просмотра полного содержимого этого ресурса.
 
Последнее редактирование модератором:
dimsim, редирект на магазин не нужно тут делать, куки не ставятся из-за этого
привет, ОК то есть как я писал из вариантов - curl ом выполнить то что нужно а остальное оставить так же или есть предложения, друзья?
 
Научить ИМ читать куки XF?
Если это в пределах одного домена, проблем нет, форум ставит куку на весь домен
PHP:
$config['cookie'] = array(
    'prefix' => 'xf_',
    'path'   => '/',
    'domain' => '.example.com'
    );
Печаль начинается когда домены разные.
 
  • Мне нравится
Реакции: Hope
нее, не.... мой скрипт должен получить значения как тут $url = "www.moi-internet-magazin.rus/login.php?&id=" . $id . "&hash=" . $hash; я предложил curl'ом отправить раз уж редирект нельзя (нельзя так нельзя это не страшно но юзер должен автоматически и на стороне магаза быть залогиненым). Есть еще предложения? Сделаю курлом если нет:)

Если это в пределах одного домена, проблем нет, форум ставит куку на весь домен
PHP:
$config['cookie'] = array(
    'prefix' => 'xf_',
    'path'   => '/',
    'domain' => '.example.com'
    );
Печаль начинается когда домены разные.
упс, так он её не успел поставить в этом методе
 
Последнее редактирование модератором:
нее, не.... мой скрипт должен получить значения как тут $url = "www.moi-internet-magazin.rus/login.php?&id=" . $id . "&hash=" . $hash; я предложил curl'ом отправить раз уж редирект нельзя (нельзя так нельзя это не страшно но юзер должен автоматически и на стороне магаза быть залогиненым). Есть еще предложения? Сделаю курлом если нет:)
Ну если магазин при этом запросе не ставит куки, то можно и так.

Только у ксена есть свой клиент для запросов, используйте его :)
 
Только у ксена есть свой клиент для запросов, используйте его :)
не вкурсе , а как и что? Почему именно используйте? Напрямую дергая курл мы меньше зависим от всякого третьего софта в нашей цепочке, то есть преимуществ нет на деле?

Ну если магазин при этом запросе не ставит куки, то можно и так.
тут Вы правы :). Просто курл не сделал сессию на стороне ИМ, делаю редирект с форума - ставится кука и потом редирект обратно в форум но тут ничего нет, редирект ставлю в 'www.moi-internet-magazin.rus/xenforo/index.php?login/login'

Не туда редирект с ИМ поставил?
Или всетаки не тот класс расширяю так что у него еще не поставилось кука а я уже редиректнул юзера ..?
 
не вкурсе , а как и что? Почему именно используйте? Напрямую дергая курл мы меньше зависим от всякого третьего софта в нашей цепочке, то есть преимуществ нет на деле?
Ну да, а зачем использовать другие функции ксена?
Там сразу и данные профильтруются, и безопаснее будет, и удобнее.

Как работает, можно глянуть в XF\Service\Upgrade\Checker::check()

тут Вы правы :). Просто курл не сделал сессию на стороне ИМ, делаю редирект с форума - ставится кука и потом редирект обратно в форум но тут ничего нет, редирект ставлю в 'www.moi-internet-magazin.rus/xenforo/index.php?login/login'

Не туда редирект с ИМ поставил?
Или всетаки не тот класс расширяю так что у него еще не поставилось кука а я уже редиректнул юзера ..?
Куки ставятся сразу при редиректе из авторизации. После того, как ИМ перекинул назад в ксен, сревер уже забыл о том, кто нужно ставить куки.
Поэтому нужно учить ИМ читать куки ксена, или ставить отдельно ксеном, а читать ИМ
 
dimsim, есть 1 предложение забить и не лезть, ибо понимание о ооп отсутствует и современных разработках. Что написал ты им - сборка из говна и палок и не более, так как понятие ооп отсутсвует, орм и не только отсутствует. Начать изучение языка, потом взять микрофреймворк slim потыкаться в нём, понять как построен DI контейнер и не только, а потом двигаться дальше и развиваться. Изучить технологии и стеки современной разработкой, а потом уже куда то лезть и делать. Придёт понимание, что этот им просто один большой мусор который не возможно даже поддерживать. Ну и конечно код покрывать тестами. Тестов нет, следовательно код говнокод
 
Последнее редактирование:
Там сразу и данные профильтруются, и безопаснее будет, и удобнее.
Как работает, можно глянуть в XF\Service\Upgrade\Checker::check()
OK, и да посмотрел - хорошо/можно.. но уже как бы сам способ такой не верно я предпологал что сработает.. И кстати, а есть отзыв на этот газл? Предыдущий раз когда я его использовал у него апи обновлялось не раз за 1-6 мес и приходилось код менять у себя каждый раз..


Поэтому нужно учить ИМ читать куки ксена, или ставить отдельно ксеном, а читать ИМ
дело в том что когда я делал редирект header(...) ИМ успевал авторизовать юзера и держит куки даже после того как юзер уже перенаправлен обратно на форум :) Как посоветуете авторизацию не терять?

Начать изучение языка, потом взять микрофреймворк slim потыкаться в нём
про слим не слышал, спасибо. Расскажите про хен вкратце - почему он платный и лучше чем остальные? У меня свои критерии были почему я сюда пришел (ООП и знакомая реализация). Сама ORM я так понимаю легче чем доктрина? Интересно ядро от чего используется?
 
Последнее редактирование модератором:
Современный облачный хостинг провайдер | Aéza
Назад
Сверху Снизу