Php Laravel 5.4:自定义中间件不在路由中工作

Php Laravel 5.4:自定义中间件不在路由中工作,php,laravel,routes,laravel-5.3,laravel-middleware,Php,Laravel,Routes,Laravel 5.3,Laravel Middleware,我创建了以下中间件来检查用户会话 <?php namespace App\Http\Middleware; use Closure; class Checkusersession { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed

我创建了以下中间件来检查用户会话

<?php

namespace App\Http\Middleware;

use Closure;

class Checkusersession
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if (!$request->session()->has('admin_name')) {
            // user value cannot be found in session
            return redirect('adminlogin');
        }

        return $next($request);
    }
}
这是我的kernel.php

 protected $routeMiddleware = [
    'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
    'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
    'can' => \Illuminate\Auth\Middleware\Authorize::class,
    'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
    'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
    'usersession' => \App\Http\Middleware\Checkusersession::class,
];
这是我创建会话的控制器方法:

public function auth_admin(Request $request)
{
    $admin_emai = $request->input('admin_email');
    $admin_password = $request->input('admin_password');

    $checklogin = DB::table('admin_login')
        ->select('admin_id','admin_email','admin_name')
        ->where([
            'admin_email' => $admin_email,
            'admin_password' => $admin_password
        ])->first();

    if (count($checklogin) > 0) {
        $request->session()->put('admin_id',$checklogin->admin_id);
        $request->session()->put('admin_name',$checklogin->admin_name);
        $request->session()->put('admin_email',$checklogin->admin_email);

        return redirect()->action('Admin_controller@webadmin');
    } else {
        return redirect()->action('Admin_controller@admin_login_page')->with('status','Incorrect Email ID or Password');
    }
}

我希望中间件检查会话(admin_name)是否存在。如果没有,请将用户重定向到登录页面。但它不起作用。如果我直接从url访问webadmin(仪表板),即使未设置会话,它也会提供访问权限。请帮助。

您的路线错误,您应该将其写为(在L5.4中):

甚至:

Route::group(['middleware' => 'auth'], function(){
    Route::get('webadmin', 'Admin_controller@index');
});
在L5.3中(正如您标记的问题),在L5.4中,我想您也可以写:

Route::get('webadmin',['middleware' => 'usersession', 'uses => 'Admin_controller@index']);

另外,您是否尝试过只执行
dd(request())或类似代码是否实际被激发?

如果路由错误,则应将其编写为(在L5.4中):

甚至:

Route::group(['middleware' => 'auth'], function(){
    Route::get('webadmin', 'Admin_controller@index');
});
在L5.3中(正如您标记的问题),在L5.4中,我想您也可以写:

Route::get('webadmin',['middleware' => 'usersession', 'uses => 'Admin_controller@index']);

另外,您是否尝试过只执行
dd(request())或类似代码是否实际启动了它?

在控制器中重定向之前,尝试创建dd($request->session()),查看我是否成功创建了会话,还要检查config/session.php文件以查看配置是否正确。我建议使用laravel的Auth类。这里也有同样的问题:/在控制器重定向之前尝试创建一个dd($request->session()),看看我是否成功创建了会话,同时检查config/session.php文件,看看您的配置是否正确。我建议使用laravel的Auth类。这里有相同的问题:/Having the same problem here。路由未到达我的自定义中间件。这里有相同的问题。路由未到达我的自定义中间件。