こんにちは、コバヤシです。
今回はCKFinderでLaravelの認証を使う方法についてです。
以前も少し書いたのですが、最新のCKFinderでは少しコツが必要だったので改めて書きたいと思います。
素直にこちらを使っておけという話は無しで。。 github.com
CKFinderとは
CKFinderは、 CKSourceが出すファイルマネージャーです。CKEditorなどと連携しWEB上でファイルを管理することが可能となります。
このCKFinderはサーバーに設置するだけで簡単に利用できますが、そのままでは誰でもアクセス出来てセキュリティ的に問題となります。
そこでLaravelの認証を通ったユーザーのみアクセス出来るようにします。
認証の設定をする
CKFinderには初めから認証に関する設定を記述する箇所があります。
ckfinder/config.php
<?php $config['authentication'] = function () { return false; };
この無名関数内に判定処理を書いていけば良いのですが、CKFinderはLaravelとは別のシステムのため単純にLaravelの認証処理を書いても動きません。 そこで、以前「Laravel使い必見!どこでもLaravelを使用する方法」で書いた方法を使用します。
ckfinder/config.php
<?php require '/laravel/bootstrap/autoload.php'; $app = require_once realpath($_SERVER['DOCUMENT_ROOT'] . '/../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()); $config['authentication'] = function () { return auth()->check(); };
こんな感じでLaravelを読み込めば認証性処理が出来る、、はずだったのですが最新(3.5.3 2022/1/10現在)のCKFinderではエラーが出て動きませんでした。
Laravelの読み込み箇所を変更する
どうやらCKFinderがComposerで読み込んでいるライブラリとLaravelが読み込んでいるライブラリが干渉しているようです。
そこで、読込する箇所を変更します。
CKFinder側のComposerの読み込み前に、LaravelのComposerの読み込みを行います。
ckfinder/core/connector/php/connector.php
<?php require '/laravel/bootstrap/autoload.php'); require_once __DIR__ . '/vendor/autoload.php';
ckfinder/config.php
<?php $app = require_once realpath($_SERVER['DOCUMENT_ROOT'] . '/../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()); $config['authentication'] = function () { return auth()->check(); };
これで無事CKFinderが動きました。
まとめ
以前は動いた方法でもライブラリなどのバージョンが上がると動かなくなって焦ることが多々あります。
日々情報収集と勉強を怠らないようにしていきたいところです。