使用 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 3以编程方式为组件设置默认模板

创建一个Joomla!文章以编程方式

有没有办法从我的 Joomla 组件中以编程方式添加菜单项?

使用 PHP 以编程方式将 CSS 注入 Joomla 内容编辑器 (JCE)?

以编程方式在Joomla中创建菜单项

Joomla PHP如何以编程方式进入编辑个人资料页面