由于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的会话吗?
答案 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中使用常规会话,但它有效,并且它是安全的。