如何将 CKFinder 与 Laravel 5.2 集成?

How to integrate CKFinder with Laravel 5.2?

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

更新: 我曾经与 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 的会话?

很简单。 只需修改 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',
    ],
];

然后再试一次。

内核对象有一个函数"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();
}

我不认为这里接受的答案是解决这个问题的方法,上传文件时另一个答案不起作用(MethodNotAllowed 异常)。

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

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

用户注销时:

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

在 ckfinder 配置中:

session_start();

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

在 Laravel 中使用常规会话有点麻烦,但它有效,而且安全。