如何为KC Finder设置中间件?已配置登录Session后的路径设置咨询
给kcfinder的browse.php加中间件的几个可行方案
嘿,既然你已经在登录后配置了Session授权,要给这个/templateEditor/kcfinder/browse.php的请求加中间件,我给你整理几个实际能用的路子:
1. 直接在browse.php开头塞中间件逻辑
毕竟browse.php是这个请求的入口文件,最直接的方式就是在文件最顶部(一定要在kcfinder的初始化代码之前)加上你的验证逻辑:
// 先跑中间件:检查用户是否已登录,Session是否有效 session_start(); if (!isset($_SESSION['ckfinder_auth']) || $_SESSION['ckfinder_auth'] !== true) { // 没授权的话,直接返回403或者跳登录页 header("HTTP/1.1 403 Forbidden"); exit("权限不足,请先登录。"); } // 下面是kcfinder原来的代码,别碰 require "core/bootstrap.php"; // ... 其他原有代码
2. 用kcfinder自带的配置文件做全局验证
kcfinder的config.php里有个auth配置项,完全可以把你的Session验证集成进去,相当于加了个全局中间件:
找到config.php里的'auth'参数,替换成你的验证函数就行:
'auth' => function() { session_start(); // 验证通过就返回true,否则false return isset($_SESSION['ckfinder_auth']) && $_SESSION['ckfinder_auth'] === true; },
这样不管是browse.php还是其他kcfinder的请求,都会先过这个验证,省得每个文件都改。
3. 自定义前置中间件文件,不碰原代码
要是不想动原有browse.php,你可以单独整个中间件文件,让请求先经过它:
- 在
/templateEditor/kcfinder/下建个middleware.php,内容如下:
session_start(); if (!isset($_SESSION['ckfinder_auth']) || $_SESSION['ckfinder_auth'] !== true) { header("HTTP/1.1 403 Forbidden"); exit("权限不足,请先登录。"); } // 验证过了就转发到原browse.php require "browse.php";
- 然后改一下CKEditor的配置,让它请求这个中间件文件而非直接请求browse.php:
CKEDITOR.replace('editor1', { filebrowserImageBrowseUrl: '/templateEditor/kcfinder/middleware.php?opener=ckeditor&type=images&CKEditor=editor1&CKEditorFuncNum=1&langCode=en' });
最后提醒下哈,不管用哪种方式,session_start()一定要在任何输出(包括空格、换行)之前调用,不然会报Headers already sent的错误,踩过坑的人含泪提醒😅
内容的提问来源于stack exchange,提问作者TryHardz
相关产品推荐
相关产品推荐

