Joomla注销消息

时间:2014-02-24 06:10:15

标签: joomla message-queue logout

我正在尝试修改

  

'Token Interceptor'系统插件

joomunited.com

原始插件会在使用register_shutdown_function遇到无效令牌错误时重定向。

我正试着去做:

  1. 如果用户已登录
  2. ,请将用户注销
  3. 使用无效令牌消息重定向到登录页面
  4. 代码:

    $app = JFactory::getApplication();
    if (!JFactory::getUser()->guest)
    {
        $app->logout();
    }
    $app->redirect('/index.php', JText::_('JINVALID_TOKEN'), 'warning');
    

    我可以成功登出用户并重定向到登录页面但是没有显示错误消息。

    如何在用户退出后保留消息?

    我也尝试过:

    $app->enqueueMessage(JText::_('JINVALID_TOKEN'), 'warning');
    

    但这也不起作用......

2 个答案:

答案 0 :(得分:0)

当您注销时,您将销毁会话,因此您将不再拥有该消息。

这将为您提供重定向消息。

$this->redirect = JUri::base() . 'index.php?option=com_users&view=login';    
if (!JFactory::getUser()->guest && $app->input->getCmd('option') != 'com_users')

{
    $app->enqueueMessage('message', 'warning');
    //$app->logout();
    $app->redirect($this->redirect);

}

这不会因为会话被销毁

$this->redirect = JUri::base() . 'index.php?option=com_users&view=login';    
if (!JFactory::getUser()->guest && $app->input->getCmd('option') != 'com_users')

{
    $app->enqueueMessage('message', 'warning');
    $app->logout();
    $app->redirect($this->redirect);

}

未经测试但

$app->logout()
echo '<div class="">'. JText::_('whatever you want') . '</div>'; 
$module = JModuleHelper::getModule('login');
$output = JModuleHelper::renderModule($module);

像这样的东西

答案 1 :(得分:0)

我想出的解决方案是Alonzo Turner的第2篇here的变体。

插件重定向到登录页面,并在网址中传递参数。然后,onAfterInitialise事件会查找此参数并显示已找到的消息。

class PlgSystemTokeninterceptor extends JPlugin
{

    public function __construct(&$subject, $config = array())
    {
        parent::__construct($subject, $config);
        $app = JFactory::getApplication();

        if (($app->isSite() && $this->params->get('use_frontend')) || ($app->isAdmin() && $this->params->get('use_backend'))) 
        {
            register_shutdown_function(array($this,'redirectToLogin'));
        }

    }

    public function redirectToLogin()
    {
        $content = ob_get_contents();

        if($content == JText::_('JINVALID_TOKEN') || $content == 'Invalid Token')
        {
            $app = JFactory::getApplication();

            if (!JFactory::getUser()->guest)
            {
                $app->logout();
            }

            $app->redirect(JURI::base().'index.php?invalid_token=true');

            return false;   
        }
    }

    function onAfterInitialise()
    {
        $app = JFactory::getApplication();
        $invalid_token = $app->input->get('invalid_token', 'false');

        if ($invalid_token == 'true')
        {
            $app->enqueueMessage(JText::_('JINVALID_TOKEN'), 'warning');
        }

        return true;
    }

}