Php Laravel 5.7全局中间件不工作

Php Laravel 5.7全局中间件不工作,php,laravel,middleware,laravel-blade,Php,Laravel,Middleware,Laravel Blade,我想在我的laravel项目中创建一个中间件,以检查什么类型的用户登录到我的网站。我的想法是检查用户是否登录到中间件,然后将会话变量设置为某个值 这是中间件: CheckIfLoggedin.php use Closure; use Auth; class CheckIfLoggedin { public function handle($request, Closure $next) { if (Auth::check()) { $re

我想在我的laravel项目中创建一个中间件,以检查什么类型的用户登录到我的网站。我的想法是检查用户是否登录到中间件,然后将会话变量设置为某个值

这是中间件:

CheckIfLoggedin.php

use Closure;
use Auth;

class CheckIfLoggedin
{
    public function handle($request, Closure $next)
    {
        if (Auth::check()) {
            $request->session()->put('loggedin', 'admin');
        }
        return $next($request);
    }
}
我已将其注册为全局中间件,如文档中所述,将这一行添加到Kernel.php

protected $middleware = [
    // ...
    \App\Http\Middleware\CheckIfLoggedin::class,
];
我在刀片模板中检查此会话变量的值,如下所示:

@if(session('loggedin'))
    <!-- some html code -->
@endif

关于为什么这个中间件不能像我期望的那样工作,有什么想法吗?请注意,我是相当新的拉威尔虽然


谢谢

您需要启动一个会话,然后才能使用它进行任何操作,如果您阅读股票,您将看到该会话仅在
web
组中启动(通过
\illumination\session\Middleware\StartSession::class
),因此您需要在其下方添加您自己的中间件

protected $middleware = [
    \App\Http\Middleware\CheckForMaintenanceMode::class,
    \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
    \App\Http\Middleware\TrimStrings::class,
    \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
    \App\Http\Middleware\TrustProxies::class,
];
/**
 * The application's route middleware groups.
 *
 * @var array
 */
protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        // \Illuminate\Session\Middleware\AuthenticateSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
    ],

注意:我想做的是利用定制的警卫,但不是这种工作的会话


您需要启动一个会话,然后才能使用它执行任何操作,如果您阅读股票,您将看到该会话仅在
web
组中启动(通过
\lightlight\session\Middleware\StartSession::class
),因此您需要在其下方添加自己的中间件

protected $middleware = [
    \App\Http\Middleware\CheckForMaintenanceMode::class,
    \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
    \App\Http\Middleware\TrimStrings::class,
    \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
    \App\Http\Middleware\TrustProxies::class,
];
/**
 * The application's route middleware groups.
 *
 * @var array
 */
protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        // \Illuminate\Session\Middleware\AuthenticateSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
    ],

注意:我想做的是利用定制的警卫,但不是这种工作的
会话

protected $middleware = [
    \App\Http\Middleware\CheckForMaintenanceMode::class,
    \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
    \App\Http\Middleware\TrimStrings::class,
    \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
    \App\Http\Middleware\TrustProxies::class,
];
/**
 * The application's route middleware groups.
 *
 * @var array
 */
protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        // \Illuminate\Session\Middleware\AuthenticateSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
    ],