【问题标题】:JFactory getUser randomly not working in wrapperJFactory getUser 随机不在包装器中工作
【发布时间】:2014-01-24 08:38:20
【问题描述】:

我正在使用旧的 1.5.26 Joomla 安装。我为该站点开发了一个 Web 应用程序,将其嵌入到 joomla 包装器中,并决定使用 joomla 用户管理进行访问(在此处插入头部撞墙的声音)。

我用了一个简单的代码:

<?php
define( '_JEXEC', 1 );
define('JPATH_BASE', dirname((dirname(__FILE__))));
define( 'DS', DIRECTORY_SEPARATOR );
require_once (JPATH_BASE . DS . 'includes' . DS . 'defines.php');    
require_once (JPATH_BASE . DS . 'includes' . DS . 'framework.php');    
$mainframe =& JFactory::getApplication('site');
$mainframe->initialise();

$usuario= JFactory::getUser();
$idUsuario=$usuario->id;
$nombreUsuario=$usuario->name;

if ($idUsuario==0)
{
     echo "<p>Error: no tiene permiso</p>";
     die ();
}
else
{
    echo "<p>Hola, $nombreUsuario.</p>";
}
/* And the script goes on... */

问题是,一切都很完美。我在几台带有多个网络浏览器(甚至是 iPad)的计算机上对其进行了测试,它似乎工作正常。我很高兴......直到我开始生产并允许真实用户访问它。

彻底彻底的灾难。许多用户(其中​​很多)收到“错误”消息,jFactory::getUser 为他们返回 0。我用他们的用户名和密码试了一下,效果很好。他们从头开始尝试,但没有。

仅当我将脚本嵌入包装器时才会发生这种情况。如果我让用户通过指向应用程序目录的直接链接访问 Web 应用程序,问题就消失了。

有人知道为什么会发生这种情况吗?

提前致谢。

【问题讨论】:

    标签: php joomla


    【解决方案1】:

    您的问题与此问题How to pass Joomla parameters to an iframe (wrapper) page? 中的问题相同,其中答案建议将其包含在您的脚本中:

    <?php
    define('_JEXEC', 1 );
    define('JPATH_BASE', $_SERVER['DOCUMENT_ROOT'] ); 
    define( 'DS','/' );
    
    require_once ( JPATH_BASE.DS. 'includes'.DS.'defines.php' );
    require_once ( JPATH_BASE.DS.'includes'.DS.'framework.php' );
    require(JPATH_BASE.DS.'libraries/joomla/factory.php');
    
    $mainframe =& JFactory::getApplication('site');
    $mainframe->initialise();
    ?>
    

    还有这个(几乎和你的代码一样):Getting user information within wrapper

    【讨论】:

    • 添加 'factory.php' 行无效。我将不得不按照您的链接的建议尝试编辑包装模板。谢谢。
    【解决方案2】:
    define( '_JEXEC', 1 );
    define( 'JPATH_BASE', realpath(dirname(__FILE__).'/../' ));  
    require_once ( JPATH_BASE .'/includes/defines.php' );
    require_once ( JPATH_BASE .'/includes/framework.php' );
    
    $mainframe = JFactory::getApplication('site');
    
    
        $user = & JFactory::getUser();
    

    这对我来说无处不在。只需注意 /../ 如果你放入 iframe 的文件层次更深,你可以添加更多 /../ 的

    【讨论】:

    • 哇,我完全忘记了这个。谢谢,但我不久前设法切换到 Joomla 3.x,所以问题就消失了。
    猜你喜欢
    • 2014-10-18
    • 1970-01-01
    • 2013-05-16
    • 2013-01-26
    • 2011-09-04
    • 2015-12-09
    • 1970-01-01
    • 1970-01-01
    • 2016-10-25
    相关资源
    最近更新 更多