【问题标题】:Laravel Route Middleware auth:admin not working for all RoutesLaravel 路由中间件 auth:admin 不适用于所有路由
【发布时间】:2019-10-05 13:49:33
【问题描述】:

我想通过 auth:admin 中间件预先检查两个不同的路由组。这适用于内部的第一个路由组,但不适用于另一个命名空间中的第二个路由组。

我的路线文件如下所示:

Route::group(['middleware' => ['auth:admin']], function(){

    Route::group(['prefix' => 'admin', 'namespace' => 'Admin', 'as' => 'admin.'], function(){
        Route::resource('dashboard', 'DashboardController')->only(['index', 'create', 'store']);
    });

    Route::group(['prefix' => 'team/{team_id}', 'namespace' => 'Team', 'as' => 'team.'], function(){
        Route::resource('dashboard', 'DashboardController')->only(['index', 'create', 'store']);
    });

});

如果我没有登录并尝试转到 admin/dashboard,我将被重定向到 login/admin。但是,如果我尝试转到 team/1/dashboard,它会显示错误“尝试获取非对象的属性“标题”。 如何让 auth:admin 中间件也与我的团队路由一起使用?

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    检查 app/Http/Controllers/Middleware/RedirectIfAuthenticated.php 文件和 更新代码以供不同的警卫使用

    // app/Http/Controllers/Middleware/RedirectIfAuthenticated.php

    <?php
    
    namespace App\Http\Middleware;
    
    use Closure;
    use Illuminate\Support\Facades\Auth;
    
    class RedirectIfAuthenticated
    {
        public function handle($request, Closure $next, $guard = null)
        {
            if ($guard == "admin" && Auth::guard($guard)->check()) {
                return redirect('/admin');
            }
            if ($guard == "writer" && Auth::guard($guard)->check()) {
                return redirect('/writer');
            }
            if (Auth::guard($guard)->check()) {
                return redirect('/home');
            }
    
            return $next($request);
        }
    }
    

    【讨论】:

      【解决方案2】:

      创建一个middleware

      class IsAdmin
      {
          public function handle($request, Closure $next)
          {
              if (Auth::user()->permission == 'admin') {
                  return $next($request);
              }
      
              return redirect()->route('some.route'); // If user is not an admin.
          }
      }
      

      kernel.php注册

      protected $routeMiddleware = [ .... 'is.admin' => \App\Http\Middleware\IsAdmin::class, ];

      所以你的路线:

      Route::group(['middleware' => 'is.admin'], function () {
      Route::group(['prefix' => 'admin', 'namespace' => 'Admin', 'as' => 'admin.'], function(){
              Route::resource('dashboard', 'DashboardController')->only(['index', 'create', 'store']);
          });
      
          Route::group(['prefix' => 'team/{team_id}', 'namespace' => 'Team', 'as' => 'team.'], function(){
              Route::resource('dashboard', 'DashboardController')->only(['index', 'create', 'store']);
          });
      });
      

      【讨论】:

        猜你喜欢
        • 2020-11-12
        • 2017-08-06
        • 2017-07-04
        • 1970-01-01
        • 2016-02-07
        • 2022-06-15
        • 2016-02-02
        • 2019-06-09
        • 1970-01-01
        相关资源
        最近更新 更多