如何将CKFinder与Laravel 5.2集成?

时间:2016-03-17 10:18:55

标签: laravel-5.2 ckfinder

由于Laravel 5.2只与#34; web"中包含的路由共享它的会话。中间件组,我不再能在CKFinder配置中运行Auth :: check()。有人知道如何解决这个问题吗?

更新: 我曾经与CKFinder分享laravel的5个会话,以便为授权用户提供访问权限。像这样:

require __DIR__.'/../../bootstrap/autoload.php';
$app = require_once __DIR__.'/../../bootstrap/app.php';
$app->make('Illuminate\Contracts\Http\Kernel')
->handle(Illuminate\Http\Request::capture());

function CheckAuthentication()
{    
    return Auth::check() && auth()->user()->isAdmin();
}

但是现在因为所有路线都应该用“' web'中间件,该组外的路由不允许使用Auth :: user()

Route::group(['middleware' => 'web'], function () {
});

如何将CKFinder路线放到' web'中间件能够使用Laravel的会话吗?

3 个答案:

答案 0 :(得分:2)

很简单。 只需修改Kernel.php

 protected $middleware = [
    \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
    \Illuminate\Session\Middleware\StartSession::class,
];

protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
    ],

    'api' => [
        'throttle:60,1',
    ],
];
然后再试一次。

答案 1 :(得分:1)

内核对象有一个函数" pushMiddleware"。

使用此功能运行中间件" EncryptCookies"和" StartSession"。

它对我有用:)

require __DIR__.'/../../bootstrap/autoload.php';
$app = require_once __DIR__.'/../../bootstrap/app.php';
$app->make('Illuminate\Contracts\Http\Kernel')
->pushMiddleware(\App\Http\Middleware\EncryptCookies::class)
->pushMiddleware(\Illuminate\Session\Middleware\StartSession::class)
->handle(Illuminate\Http\Request::capture());

function CheckAuthentication()
{    
    return Auth::check() && auth()->user()->isAdmin();
}

答案 2 :(得分:1)

我不相信这里接受的答案是解决这个问题的方法,而另一个答案在上传文件时不起作用(MethodNotAllowed exception)。

我通过使用常规会话让它工作 - 所以在Laravel中,用户登录:

session_start();
$_SESSION['ckfinder_auth'] = true;

在用户注销时:

session_start();
unset($_SESSION['ckfinder_auth']);

在ckfinder config中:

session_start();

function CheckAuthentication()
{
    return !empty($_SESSION['ckfinder_auth']);
}

有点麻烦不得不在Laravel中使用常规会话,但它有效,并且它是安全的。