我需要在组件中自定义方法。我需要做出不同的动作(删除用户和其他信息),然后以编程方式注销用户(不是通过按钮链接),我该如何实现?
我试图在方法结束时这样做:
$return = JRoute::_('index.php?option=com_users&task=user.logout', true);
$this->setRedirect($return,$msg);
但这会产生无效的令牌信息。
由于
答案 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的默认登录模块(它也有一个注销按钮)。转到扩展程序>>模块管理器>>新>>登录>>适当配置并保存。