Codeigniter 3.x、Ion-auth、CKFinder - 如何将登录状态从 ion-auth 传递到 CKFinder 的配置文件
Codeigniter 3.x, Ion-auth, CKFinder - how to pass the logged in status from ion-auth to CKFinder's config file
如何将登录状态从 ion-auth/codeigniter 传递到 CKFinder 的配置文件?
在CKfinder中,有一个认证配置文件如下:
$config['authentication'] = function () {
return false;
};
在 codeigniter 中,我使用的是 ion-auth。在登录()方法的Auth控制器中,如果用户成功登录,我添加了这个:
$_SESSION['userloggedin'];
$_SESSION['userloggedin'] 确实设置为当我回显到屏幕时,我得到“1”,但回显在 login() 方法中。我似乎可以在 CKfinder 配置中获得会话变量。我该怎么做?我想做这样的事情:
$config['authentication'] = function () {
if ($_SESSION['userloggedin'] === true) {
return true;
} else {
return false;
}
};
感谢任何帮助。
您无法直接访问 $_SESSION
,因为 CI 使用其自己的会话形式,通常以 __ci_vars
开头,并且没有简单的方法直接访问它们,除非您独立加载会话驱动程序,这是一整套蠕虫病毒。
我是这样实现的:
好的,所以我使用与您相同的东西 - CKFinder、IonAuth 等
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;
然后在您的默认路由控制器中(如果您转到本地主机或 somesite.com,则您的站点首先登陆的控制器)添加 index()
函数的顶部添加定义的 if 语句 - 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 未设置)因为我的前端控制器没有使用它(或会话),这就是 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 版本来说都太旧了。
如何将登录状态从 ion-auth/codeigniter 传递到 CKFinder 的配置文件?
在CKfinder中,有一个认证配置文件如下:
$config['authentication'] = function () {
return false;
};
在 codeigniter 中,我使用的是 ion-auth。在登录()方法的Auth控制器中,如果用户成功登录,我添加了这个:
$_SESSION['userloggedin'];
$_SESSION['userloggedin'] 确实设置为当我回显到屏幕时,我得到“1”,但回显在 login() 方法中。我似乎可以在 CKfinder 配置中获得会话变量。我该怎么做?我想做这样的事情:
$config['authentication'] = function () {
if ($_SESSION['userloggedin'] === true) {
return true;
} else {
return false;
}
};
感谢任何帮助。
您无法直接访问 $_SESSION
,因为 CI 使用其自己的会话形式,通常以 __ci_vars
开头,并且没有简单的方法直接访问它们,除非您独立加载会话驱动程序,这是一整套蠕虫病毒。
我是这样实现的:
好的,所以我使用与您相同的东西 - CKFinder、IonAuth 等
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;
然后在您的默认路由控制器中(如果您转到本地主机或 somesite.com,则您的站点首先登陆的控制器)添加 index()
函数的顶部添加定义的 if 语句 - 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 未设置)因为我的前端控制器没有使用它(或会话),这就是 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 版本来说都太旧了。