首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Codeigniter 3.x,ion,CKFinder -如何将登录状态从Ion-auth传递到CKFinder的配置文件

Codeigniter 3.x,ion,CKFinder -如何将登录状态从Ion-auth传递到CKFinder的配置文件
EN

Stack Overflow用户
提问于 2017-12-02 11:09:35
回答 1查看 1.4K关注 0票数 1

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

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

代码语言:javascript
复制
$config['authentication'] = function () {
    return false;
};

我用的是离子点火器。在login()方法中的Auth控制器中,如果用户成功登录,我添加了以下内容:

代码语言:javascript
复制
$_SESSION['userloggedin'];

$_SESSION‘’userloggedin‘被设置为当我回送到屏幕时,我得到"1“,但是那个回显在login()方法中。我似乎可以在CKfinder配置中获得会话变量。我怎么做到的?我想做这样的事:

代码语言:javascript
复制
$config['authentication'] = function () {
    if ($_SESSION['userloggedin'] === true) { 
        return true;
    } else {
        return false;
    }
};

任何帮助都很感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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的文件,并添加以下内容:

代码语言:javascript
复制
<?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中呈现,并且所有东西都不会工作。

代码语言:javascript
复制
class Homepage extends MY_Frontend
{

    public function index()
    {
        // FOR SI AND CKFINDER
        if (defined('REQUEST') && REQUEST === 'external') {
            return;
        }

然后在ck配置中:

代码语言:javascript
复制
$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配置文件中执行以下操作:

代码语言:javascript
复制
if (defined('REQUEST') && REQUEST === 'external') {
    $config['csrf_protection'] = FALSE;
} else {
    $config['csrf_protection'] = TRUE;
}

这个解决方案不是优雅的,但它是我发现唯一有效的东西!有一些库可以从CI内部加载CK,但是对于我使用的CK版本来说,所有库都太老了。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47607255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档