使用 joomla 以编程方式注销
Posted
技术标签:
【中文标题】使用 joomla 以编程方式注销【英文标题】:logout programmatically with joomla 【发布时间】:2012-01-10 18:19:02 【问题描述】:我需要在组件中自定义一个方法。我需要执行不同的操作(删除用户和其他信息),然后以编程方式注销用户(而不是使用按钮链接),我该如何实现?
我尝试在方法结束时这样做:
$return = JRoute::_('index.php?option=com_users&task=user.logout', true);
$this->setRedirect($return,$msg);
但这给出了无效的令牌消息。
谢谢
【问题讨论】:
根据api.joomla.org/cms-3/classes/JApplication.html#method_logout,从 4.0 开始,注销功能已被弃用。还能用吗?如果没有,是否有人有替代解决方案? 【参考方案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 的默认登录模块(也有一个注销按钮)。转到扩展>>模块管理器>>新建>>登录>>适当配置并保存。
【讨论】:
当然“不是通过按钮单击”,我所指的配置页面提供了一种如何配置此事件的方法(因为用户希望在删除用户时注销)。以上是关于使用 joomla 以编程方式注销的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法从我的 Joomla 组件中以编程方式添加菜单项?