【问题标题】:logout programmatically with joomla使用 joomla 以编程方式注销
【发布时间】:2012-01-10 18:19:02
【问题描述】:

我需要在组件中自定义一个方法。我需要执行不同的操作(删除用户和其他信息),然后以编程方式注销用户(而不是使用按钮链接),我该如何实现?

我尝试在方法结束时这样做:

$return   = JRoute::_('index.php?option=com_users&task=user.logout', true);
$this->setRedirect($return,$msg);

但这给出了无效的令牌消息。

谢谢

【问题讨论】:

标签: php joomla module


【解决方案1】:

您正在开发哪个 Joomla 版本?如果是 Joomla 1.7,您可以在代码中执行此操作:

$app = JFactory::getApplication();
$app->logout( $user_id );

其中 $user_id 是您要注销的用户的 ID。如果您将其留空或未设置,它将注销正在执行请求的用户。 对于 Joomla 1.5,你可以这样做,但是在 Joomla 1.5 中有一个名为 $mainframe 的全局变量,它保存着一个应用程序的实例,所以你可以这样做:

global $mainframe;
$mainframe->logout( $user_id );

希望对你有帮助!

【讨论】:

    【解决方案2】:
    $app = JFactory::getApplication();
    $app->logout();
    

    【讨论】:

      【解决方案3】:

      Joomla 4.0 他们使用命名空间概念。

      对于 Joomla 3.x 使用

      $app = JFactory::getApplication();
      $app->logout( $user_id ); 
      

      对于 Joomla 4.x 使用

      \Joomla\CMS\Factory::getApplication();
      $app->logout($user_id);
      

      【讨论】:

      • 您也可以在Joomla! 3.9.x 中使用4.x 语法。
      【解决方案4】:

      对我有用的另一种方法是使用以下方法。您可能需要在此函数调用后重定向。

      $cmsApp = new JApplicationCms;
      $cmsApp->logout();
      

      或者您也可以重定向到用户控制器的注销操作,但这仅适用于当前登录的用户。

      // For site
      $logoutUrl   = 'index.php?option=com_users&task=user.logout&'. JSession::getFormToken() .'=1';
      // For admin
      $logoutUrl   = 'index.php?option=com_login&task=logout&'. JSession::getFormToken() .'=1';
      $app    = JFactory::getApplication();
      $app->redirect(JRoute::_($logoutUrl, false));
      

      【讨论】:

        【解决方案5】:
        Solution 1 :
        $app = JFactory::getApplication();              
        $user = JFactory::getUser();
        $user_id = $user->get('id');            
        $app->logout($user_id, array());
        
        Solution 2:
        $app = JFactory::getApplication();   
        $userToken = JSession::getFormToken();
        $msg = 'Logout';
        $return   = JURI::ROOT().'index.php?option=com_users&task=user.logout&'.$userToken . '=1';
        $app->redirect($return,$msg);
        

        【讨论】:

        • 解决方案 1 仍在使用标记为已弃用的 JApplication->logout() 函数。如果我想注销其他人,解决方案 2 只是一个 hack 并且无法使用。
        • Sloution2 只需触发它工作的任何功能。使用我的项目
        【解决方案6】:

        如果是 Joomla 2.5 您可以使用 Joomla 的默认登录模块(也有一个注销按钮)。转到扩展>>模块管理器>>新建>>登录>>适当配置并保存。

        【讨论】:

        • 当然“不是通过按钮单击”,我所指的配置页面提供了一种如何配置此事件的方法(因为用户希望在删除用户时注销)。
        猜你喜欢
        • 2012-06-15
        • 2011-03-07
        • 2015-06-19
        • 2015-07-22
        • 2012-01-27
        • 1970-01-01
        • 2014-04-17
        • 2017-01-15
        • 1970-01-01
        相关资源
        最近更新 更多