Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Codeigniter 3.x,Ion auth,CKFinder-如何将登录状态从Ion auth传递到CKFinder';s配置文件_Php_Codeigniter_Ckfinder_Ion Auth - Fatal编程技术网

Php Codeigniter 3.x,Ion auth,CKFinder-如何将登录状态从Ion auth传递到CKFinder';s配置文件

Php Codeigniter 3.x,Ion auth,CKFinder-如何将登录状态从Ion auth传递到CKFinder';s配置文件,php,codeigniter,ckfinder,ion-auth,Php,Codeigniter,Ckfinder,Ion Auth,如何将登录状态从ion auth/codeigniter传递到CKFinder的配置文件 在CKfinder中,有一个用于身份验证的配置文件,如下所示: $config['authentication'] = function () { return false; }; 在codeigniter中,我使用的是ion auth。在login()方法中的Auth控制器中,如果用户成功登录,我添加了以下内容: $_SESSION['userloggedin']; $\u会话['userlo

如何将登录状态从ion auth/codeigniter传递到CKFinder的配置文件

在CKfinder中,有一个用于身份验证的配置文件,如下所示:

$config['authentication'] = function () {
    return false;
};
在codeigniter中,我使用的是ion auth。在login()方法中的Auth控制器中,如果用户成功登录,我添加了以下内容:

$_SESSION['userloggedin'];
$\u会话['userloggedin']设置为当我回显到屏幕时,得到“1”,但该回显在login()方法中。我似乎可以在CKfinder配置中获取会话变量。我该怎么做?我想这样做:

$config['authentication'] = function () {
    if ($_SESSION['userloggedin'] === true) { 
        return true;
    } else {
        return false;
    }
};

非常感谢您的帮助。

您不能直接访问
$\u SESSION
,因为CI使用自己的会话形式,这些会话通常以
\u CI\u vars
为前缀,除非您独立加载会话驱动程序,否则无法轻松直接访问它们

以下是我是如何做到这一点的:

好的,所以我使用和你一样的东西-CKFinder,IonAuth等等

index.php

执行以下操作:$system\u path=dirname(\uuuu文件\uuuuu)。目录“”分隔符系统'和
$application\u folder=dirname(\uu文件\uu)。目录“”分隔符申请";这使得无论从何处调用这些路径都是正确的

接下来,您的
index.php
文件创建一个名为
CI.php
的文件,并添加以下内容:

<?php
ob_start();
define('REQUEST', 'external');
require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . "index.php"; //or wherever the directory is relative to your path
ob_end_clean();
return $CI;
然后在ck配置中:

$CI = require_once $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . 'CI.php';


/* ============================ General Settings ======================================= */
// http://docs.cksource.com/ckfinder3-php/configuration.html

$config = array();

/* ============================ Enable PHP Connector HERE ============================== */
// http://docs.cksource.com/ckfinder3-php/configuration.html#configuration_options_authentication

$config['authentication'] = function () {
    $CI = & get_instance();
    $CI->load->library('session'); //if it's not autoloaded in your CI setup
    return $CI->session->has_userdata('user_id');
};
我只是检查会话
user\u id
标志是否设置了(TRUE logged in,FALSE not),因为我的前端控制器没有使用它(或会话),而这正是CK要通过的路径。如果您的整个站点都在
ion\u auth
之后,或者如果您自动加载它或会话,那么您可能只需要使用
return$this->ion\u auth->logged\u in()

请记住,如果您使用CSRF,CK可能也会受到影响,并且不起作用,因为它没有适当的令牌

我在CI配置文件中执行以下操作:

if (defined('REQUEST') && REQUEST === 'external') {
    $config['csrf_protection'] = FALSE;
} else {
    $config['csrf_protection'] = TRUE;
}

这个解决方案并不优雅,但它是我发现唯一有效的方法!有一些库可以从CI中加载CK,但是对于我使用的CK版本来说,它们都太旧了。

请遵循以下步骤:我可以在其他页面中回显会话变量。只是似乎没有进入ckfinder配置。哦,我的朋友,你是来请客的。Ci和其他人不太合拍,真奇怪。我可以通过我的整个CI站点看到$_会话['userloggedin'],但由于某些原因,它不在配置文件中。非常感谢您提供的解决方案,Alex。您正在使用ci的会话,但仅仅使用php会话难道不可能吗?这就是我尝试这样做的方式,但出于某种奇怪的原因,尽管我可以在其他地方读取会话变量,但我无法在配置中读取它。我不确定。我不使用php中的会话变量和ci,因为我只使用会话驱动程序。明智的做法是,如果您使用的是php会话,那么整个会话都应该是可访问的。此外,由于Ion Auth使用ci会话,为什么还要自己设置php会话变量呢?再次阅读文档后,我认为这是因为每当加载会话驱动程序时(如Ion_Auth)
$会话['addme']='sometest'被添加到CI会话系统,而不是php会话系统。我在localhost上确认了这一点。非常感谢您的帮助Alex!是否可以告诉我文档中哪里说ion_auth正在使用本机会话?如果它使用本机php会话,这不意味着它可以被带到非CI应用程序中吗?我认为将CI会话遍历到本机会话,然后在其他地方使用会更容易。我很想了解您是如何将$\u会话['addme']='sometest'添加到CI会话而不是本地会话的。忘记了一个关键步骤。在您的
index.php
文件中,执行以下
$system\u path=dirname(\uu文件\uu)。目录“”分隔符系统'
$application\u folder=dirname(\uu文件\uu)。目录“”分隔符申请";这使得无论从何处调用这些路径都是正确的
if (defined('REQUEST') && REQUEST === 'external') {
    $config['csrf_protection'] = FALSE;
} else {
    $config['csrf_protection'] = TRUE;
}