首页 文章

Laravel Web中间件组在用户未登录时显示页面

提问于
浏览
0

我正在将我们的网络应用程序从laravel 4.2升级到laravel 5.2 . 我已经设法解决了大部分问题,但这个特殊的问题让我陷入了困境 .

这是管理仪表板的路径组的外观:

Route::group(['middleware' => 'web','prefix' => 'adm'], function ()
{
      Route::get('login', ['as' => 'admin.login.view', 'uses' => 'AdminLoginController@loginView']);
      Route::post('login', ['as' => 'admin.login.attempt', 'uses' => 'AdminLoginController@attempt']);
      Route::get('logout', ['as' => 'admin.logout', 'uses' => 'AdminLoginController@logout']);

 ...other routes pertaining to admin dashboard
}

管理面板中的登录功能和所有功能按预期工作 . 唯一的问题是当用户注销时,任何人都可以访问管理面板中的其余路径(无需登录) . 我已经放置了Auth :: check()并在各种控制器中检查了auth,登录和注销按预期工作 .

如果用户未登录,则Auth :: check()将失败,如果用户已登录,则验证通过 . 如何确保此组中的所有路由仅对登录用户可访问 . 我尝试创建另一个名为authAdmin的中间件,并尝试使用它而不是Web中间件 . 在那种情况下,我甚至无法登录 .

1 回答

  • 0

    我为登录创建了新的中间件,在页面中看起来像这样

    namespace App\Http\Middleware;
    
    use Closure;
    class Login
    {
        public function handle($request, Closure $next)
        {
            $messages = config('message');
    
            if ($request->session()->has('userId')) {
                return $next($request);
            }
    
            return redirect('/')->withErrors("Please login first");
        }
    }
    

    在Kenel.php中注册登录类

    protected $routeMiddleware = [
        'login'      => \App\Http\Middleware\Login::class,
         ...
    

    在路线文件中

    Route::group(['middleware' => ['web'],'prefix' => 'adm'], function () {
    
        Route::get('login', ['as' => 'admin.login.view', 'uses' => 'AdminLoginController@loginView']);
        Route::post('login', ['as' => 'admin.login.attempt', 'uses' => 'AdminLoginController@attempt']);
        Route::get('logout', ['as' => 'admin.logout', 'uses' => 'AdminLoginController@logout']);
    
        Route::group(['middleware' => 'login'], function () {
             [Your other route here]
        });
    )};
    

    希望这有帮助

相关问题