Как интегрировать CKFinder с Laravel?

Я пытаюсь интегрировать CKFinder с Laravel, и я там около 95%. Я могу заставить все работать, за исключением функции CheckAuthentication – я должен заставить его return true независимо от того, загружается ли загрузка.

То, что я пробовал делать, это загрузить Laravel в файле config.php, а затем проверить, зарегистрирован ли пользователь, как показано ниже:

общественные / пакеты / ckfinder / config.php

 <?php /* * ### CKFinder : Configuration File - Basic Instructions * * In a generic usage case, the following tasks must be done to configure * CKFinder: * 1. Check the $baseUrl and $baseDir variables; * 2. If available, paste your license key in the "LicenseKey" setting; * 3. Create the CheckAuthentication() function that enables CKFinder for authenticated users; * * Other settings may be left with their default values, or used to control * advanced features of CKFinder. */ /** RIPPED FROM public/index.php **/ /* |-------------------------------------------------------------------------- | Register The Auto Loader |-------------------------------------------------------------------------- | | Composer provides a convenient, automatically generated class loader | for our application. We just need to utilize it! We'll require it | into the script here so that we do not have to worry about the | loading of any our classes "manually". Feels great to relax. | */ require __DIR__.'/../../../bootstrap/autoload.php'; /* |-------------------------------------------------------------------------- | Turn On The Lights |-------------------------------------------------------------------------- | | We need to illuminate PHP development, so let's turn on the lights. | This bootstraps the framework and gets it ready for use, then it | will load up this application so that we can run it and send | the responses back to the browser and delight these users. | */ $app = require __DIR__.'/../../../bootstrap/start.php'; /** END public/index.php **/ /** * This function must check the user session to be sure that he/she is * authorized to upload and access files in the File Browser. * * @return boolean */ function CheckAuthentication() { // WARNING : DO NOT simply return "true". By doing so, you are allowing // "anyone" to upload and list the files in your server. You must implement // some kind of session validation here. Even something very simple as... return Auth::check(); } 

Это всегда возвращает false. Я также попытался напрямую использовать Session Laravel для установки переменной в true, когда кто-то входит в систему, и false при выходе из системы, а затем проверяет это в файле config.php, но всегда возвращает значение по умолчанию в Session::get("IsAuthorized", false); , Может ли кто-нибудь предложить какие-то рекомендации относительно –

1) Как проверить, разрешено ли пользователю загружать пользователя?

2) Почему загрузка Laravel в другом файле, похоже, заставляет его использовать отдельный сеанс, даже когда он загружает одни и те же файлы?

Я попытался интегрировать Filemanager и KCFinder simogeo в проект Laravel, и я нашел ту же проблему.

С помощью этого кода можно поделиться сессией Laravel и проверить аутентификацию из внешних проектов:

https://gist.github.com/frzsombor/ddd0e11f93885060ef35

По моему опыту, начиная с 4.1.28, приложение :: boot () больше не инициализирует конфиденциальные данные сеанса.

Поэтому, если вы интегрируете стороннюю библиотеку, которая требует внешней проверки аутентификации через сеансы, простая проверка Auth :: check () не будет работать. Однако мы все равно можем использовать старую переменную $ _SESSION.

Например, это не будет работать:

 require __DIR__.'/../bootstrap/autoload.php'; $app = require_once __DIR__.'/../bootstrap/start.php'; $app->boot(); return Auth::check(); 

Переменные сеанса для работы Auth :: check () для работы инициализируются только в последовательности $ app-> run (). Но в этом случае маршрутизация будет происходить, и, вероятно, вы получите нераспознанную страницу … если вы не используете выделенный пакет Laravel для этого.

Это одно – ниже – все еще работает:

 // Somewhere in your app - eg in filters.php, "auth"/"guest" filters declaration if (session_id() == '') { @session_start(); /* or Session:start(); */ } $_SESSION['isLoggedIn'] = Auth::check() ? true : false; 

Тогда в вашем случае функция будет простой:

 function CheckAuthentication() { if (session_id() == '') { @session_start(); } return isset( $_SESSION['isLoggedIn'] ) && $_SESSION['isLoggedIn'] == true; } 

NB Если вы можете использовать вызовы Ajax для проверок авторизации, вы все равно можете создать пользовательский API с запросом JSON для регистрации пользователя (в качестве примера), чтобы узнать, аутентифицирован ли пользователь.

Чтобы ответить на второй вопрос – это не так просто, как кажется. Laravel, по умолчанию, использует файловую систему для хранения сеанса. Пока данные сеанса по-прежнему доступны, они шифруются – если вы не напишете собственный диспетчер сеансов, вы ничего не сможете извлечь из него.