以编程方式注销joomla

时间:2011-12-01 15:48:59

标签: php joomla module

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

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

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

但这会产生无效的令牌信息。

由于

6 个答案:

答案 0 :(得分:18)

你在做什么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 );

我希望它有所帮助!

答案 1 :(得分:4)

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

答案 2 :(得分:2)

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

对于Joomla 3.x使用

1

对于Joomla 4.x使用

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

答案 3 :(得分:0)

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

$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));

答案 4 :(得分:-1)

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);

答案 5 :(得分:-2)

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