Глобальное промежуточное ПО Laravel 5.7 не работает - PullRequest
0 голосов
/ 18 сентября 2018

Я хочу создать промежуточное программное обеспечение в моем проекте 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

Я знаю, что я также могу использовать это для подтверждения входа в систему:

@auth
    <!-- some html code -->
@endauth

, но причинаиспользование этой переменной сеанса заключается в том, что у меня будут различные типы членов (например, member или admin), и я бы назначил тип входа в систему для этой переменной сеанса позже, тогда он должен работать следующим образом в шаблоне блейда.:

@if(session('loggedin')=='member')
    <!-- some html code that only members can see -->
@elseif(session('loggedin')=='admin')
    <!-- some html code that only admins can see -->
@endif

Есть идеи, почему это промежуточное ПО не работает так, как я ожидаю?Обратите внимание, что я довольно новичок в Laravel, хотя ...

Спасибо!

1 Ответ

0 голосов
/ 18 сентября 2018

Вам нужно начать сеанс, прежде чем вы сможете выполнять с ним какую-либо работу , если вы прочитаете акцию kernel.php, вы увидите, что сеанс запущен только в webгруппы (через \Illuminate\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,
    ],

Примечание : я бы использовал политики и ворота и, возможно, специальные охранники, но не сеансы для такого рода работы.

...