laravel 5 中间件中的条件始终为 false

Condition in laravel 5 Middleware always false

我正在尝试在 Middleware 中给出条件。

Here is my script

if (auth()->check() && auth()->user()->type == 'TP001') {
    $menu->add("User Control",array('nickname' => "user",'class'=>'treeview'))
    ->append(' <b class="caret"></b>')
    ->prepend('<span class="glyphicon glyphicon-user"></span> ');

    $menu->user->add('Daftar User','user/list');
    $menu->user->add('Tipe User','user/type');
} else {
    /* Some code here...*/
}

即使我已经使用 'TP001' 登录(总是在 else 中),上面的脚本我也看不到带有条件的菜单,然后我尝试用这个

修复我的代码
auth()->user()->isDeveloper()

My model

public function isDeveloper()
{
    return ($this->type == 'TP001');
}

但还是不行,有什么办法可以正确地给出上述条件吗?提前致谢,抱歉我的英语不好。

My Kernel

  protected $middleware = [
        \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
        \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
        \App\Http\Middleware\TrimStrings::class,
        \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
        \App\Http\Middleware\Frontend::class,
  ];

您可以像这样在任何 blade 文件中获取当前用户:

{{ Auth::user()->name }}

在您的 blade 中执行此操作:

@if(Auth::check() && Auth::user()->type == 'TP001')
     /* Some code here...*/
@endif

在您的中间件中按照您的要求执行此操作!:

if (\Auth::check() && \Auth::user()->type == 'TP001') { 
     $menu->add("User Control",array('nickname' => "user",'class'=>'treeview')) 
    ->append(' <b class="caret"></b>') 
    ->prepend('<span class="glyphicon glyphicon-user"></span> '); 

    $menu->user->add('Daftar User','user/list'); 
    $menu->user->add('Tipe User','user/type'); 
    } else { 
       /* Some code here...*/ 
}

中间件内核有你发布的 $middleware,每个请求中都有 运行 的中间件,但它们 运行 在路由中间件之前(你 select 在路线定义)。

您可能正在使用 "web" 中间件组。尝试在最后添加您的自定义中间件。我认为 Laravel 5.4 中的默认值是:

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,
        \App\Http\Middleware\Frontend::class, // <-- your middleware at the end
    ],
    'api' => [
        'throttle:60,1',
        'bindings',
    ],
];

这样您就知道您的中间件将 运行 排在其他中间件之后(启动会话并检查身份验证的中间件)

您可以像这样将自定义中间件放在内核文件中受保护的 $routeMiddleware = [ ] 数组中

$routeMiddleWare = ['frontend' => \App\Http\Middleware\Frontend::class]

之后您将能够访问您的 Auth::check 并且不要忘记输入

Route::group(['middleware' => ['frontend']], function() { // your routes will go here.. });