【发布时间】:2017-07-27 21:53:23
【问题描述】:
我有一个简单的中间件,可以检查用户会话中是否有密钥。
<?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');
}
}
}
问题是我总是收到“未按要求设置会话存储”。错误。这是我的路线:
Route::get('home', function () {
return view('home');
})->middleware('web', 'CustomAuth');
我已经在变量 $middleware 中的 app\Http\Kernel.php 中添加了中间件
protected $middleware = [
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
\App\Http\Middleware\CustomAuth::class
];
我也尝试将路线更改为:
Route::group(['middleware' => ['web']], function () {
Route::get('home', function () {
return view('home');
})->middleware('CustomAuth');
});
但这没有用。知道如何确保会话已经开始,或者在调用中间件之前启动它吗?我正在使用 Laravel 5.3
【问题讨论】:
-
将你的中间件移到
web中间件组和SessionStart中间件之后。 -
虽然这行得通,但它会将其附加到所有请求中,我设法做到了
-
在它附加到所有请求之前设置它的方式,所以我认为这就是你需要的。如果您不希望这样,请在
$routeMiddleware中按名称声明它并正常使用它(在这种情况下,Web 中间件已经运行) -
谢谢,介意将此作为答案,以便我将其标记为“最佳答案”吗?
标签: php session laravel-5 laravel-5.3