如何将登录状态从ion/codeigniter传递到CKFinder的配置文件?
在CKfinder中,有一个用于身份验证的配置文件,如下所示:
$config['authentication'] = function () {
return false;
};我用的是离子点火器。在login()方法中的Auth控制器中,如果用户成功登录,我添加了以下内容:
$_SESSION['userloggedin'];$_SESSION‘’userloggedin‘被设置为当我回送到屏幕时,我得到"1“,但是那个回显在login()方法中。我似乎可以在CKfinder配置中获得会话变量。我怎么做到的?我想做这样的事:
$config['authentication'] = function () {
if ($_SESSION['userloggedin'] === true) {
return true;
} else {
return false;
}
};任何帮助都很感激。
发布于 2017-12-02 19:49:39
您不能直接访问$_SESSION,因为CI使用自己的会话形式,这些会话通常以__ci_vars为主,而且除非独立加载会话驱动程序(这是另一种蠕虫),否则没有一种简单的直接访问它们的方法。
这里是我如何使它工作的:
好的,所以我用了和你一样的东西-- CKFinder,IonAuth,.etc。
index.php
执行下面的$system_path = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'system';和$application_folder = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'application';,这使得这些路径在从任何地方调用时都是正确的。
接下来,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;然后,在默认的路由控制器中(因此,无论您的站点首先在哪个控制器上,如果您转到localhost或somesite.com),添加index()函数的顶部,添加定义的if语句--如果不这样做,默认路由将在CK中呈现,并且所有东西都不会工作。
class Homepage extends MY_Frontend
{
public function index()
{
// FOR SI AND CKFINDER
if (defined('REQUEST') && REQUEST === 'external') {
return;
}然后在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_id标志(TRUE登录,FALSE not),因为我的前端控制器没有使用它(或会话),这就是CK被路由通过的内容。如果您的整个站点都落后于ion_auth,或者您自动加载它或会话,那么您很可能只需要使用return $this->ion_auth->logged_in();。
请记住,如果您使用CSRF比CK也可能受到影响,并没有工作,因为它将没有适当的令牌。
我在CI配置文件中执行以下操作:
if (defined('REQUEST') && REQUEST === 'external') {
$config['csrf_protection'] = FALSE;
} else {
$config['csrf_protection'] = TRUE;
}这个解决方案不是优雅的,但它是我发现唯一有效的东西!有一些库可以从CI内部加载CK,但是对于我使用的CK版本来说,所有库都太老了。
https://stackoverflow.com/questions/47607255
复制相似问题