我有一個簡單的中間件,用於檢查用戶會話中是否有密鑰。在laravel的自定義中間件中使用會話
<?php
namespace App\Http\Middleware;
use Closure;
class CustomAuth
{
public function handle($request, Closure $next)
{
if($request->session()->has('uid')){
return $next($request);
}
else{
return view('unauth');
}
}
}
問題是我總是得到「Session store not set on request。」。錯誤。下面是我的路線:
Route::get('home', function() {
return view('home');
})->middleware('web', 'CustomAuth');
我在變量$中間件
protected $middleware = [
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
\App\Http\Middleware\CustomAuth::class
];
我也試圖改變我的路線,這在添加應用程序\ HTTP協議中間件\ Kernel.php:
Route::group(['middleware' => ['web']], function() {
Route::get('home', function() {
return view('home');
})->middleware('CustomAuth');
});
但這沒有奏效。任何想法如何確保會話已開始,或在中間件被調用之前啓動?我正在使用Laravel 5.3
將您的中間件移到'web'中間件組中,並在'SessionStart'中間件之後移動。 – apokryfos
雖然這是工作,它將它附加到所有請求,我設法我 –
它的方式之前,它也建立了所有請求,所以我認爲這就是你需要的。如果你不想這麼做,那麼按名稱在'$ routeMiddleware'中聲明它並正常使用它(在這種情況下,web中間件已經運行) – apokryfos