【问题标题】:Laravel route group middleware issueLaravel 路由组中间件问题
【发布时间】:2015-08-17 04:17:37
【问题描述】:

我在中间件身份验证组中保留了一些 laravel 路由:

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

    Route::controller('Activities', 'ActivitiesController');
    Route::get('foo','FooController@getFoo');
    .....
});

当我尝试登录访问这些页面时,我无法登录并且 url 一次又一次地重定向到登录页面。但是如果我使用构造函数:

public function __construct()
    {
        $this->middleware('auth');
    }

在那些控制器中它工作得很好。什么是路由组问题?

【问题讨论】:

  • 您在活动控制器或 FooController 构造函数中有中间件吗?像客人中间件?
  • 你是否修改了 app/http/middlewares/Authenticate ?
  • 没有。我保持原样进行身份验证
  • 这对我有用,在路由 Route::group(['middleware'=>'auth'],function(){ Route::controller('activities', 'ActivitiesController'); }); 然后控制器 <?php namespace App\Http\Controllers; class ActivitiesController extends Controller { public function getIndex() { return 'you are in; } } 尝试访问 /activities 我被重定向到登录页面,并成功返回到 \activities 并带有“你在”。您的登录过程是什么样的?
  • 感谢问题已解决。

标签: laravel-5 laravel-routing


【解决方案1】:

Route 有一个可以使用的 ::middleware 类:

路由 > web.php

Route::middleware(['auth'])->group(function(){
  Route::get('/activities', 'ActivitiesController@index');
});

您也可以使用我更喜欢的Route::resource();。如果你不知道它的作用,这里是文档:https://laravel.com/docs/5.8/controllers#resource-controllers

【讨论】:

    【解决方案2】:

    这对我有用,在路线中

    Route::group(['middleware'=>'auth'],function(){ 
      Route::controller('activities', 'ActivitiesController'); 
    }); 
    

    然后是控制器

    <?php namespace App\Http\Controllers; 
    
    class ActivitiesController extends Controller { 
        public function getIndex() { 
             return 'you are in; 
        } 
    } 
    

    在尝试访问 /activities 时,我被重定向到登录页面,并在成功返回 \activities 时显示“你在”。

    【讨论】:

    • 首先,Route::controller 已被弃用,并将在 5.3(6 月)中删除。 (laravel.com/docs/5.2/upgrade#upgrade-5.2.0 见弃用)。其次,我有一个非常相似的情况,我在路由组中声明了我的中间件,它只是跳过它。有什么想法吗?
    • 感谢您指出弃用。关于您的类似问题,您能否就此提出一个新问题。这样做时请给我链接
    【解决方案3】:

    在 web.php 中:

    $roleGeneral = role1.'~'.role2.'~'.role3.'~'.role4;
    Route::group(['middleware' => ['permission.role:'.$roleGeneral]], function() {})
    

    在 Kernel.php 中:

    protected $routeMiddleware = [...,
        'permission.role' => \App\Http\Middleware\CheckPermission::class,
    ];
    

    在 CheckPermission.php 中:

    public function handle($request, Closure $next, $role)
    {
        $roleArr = explode('~', $role);
        $token = JWTAuth::getToken();
        $user = JWTAuth::toUser($token);
        $roleLogin = SysRoleModel::where('id', $user->role_id)->first();
        if (in_array($roleLogin['name'], $roleArr)){
            return $next($request);
        }else{
            return \Redirect::back()->withMessage('You are not authorized to access!');
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2016-03-31
      • 1970-01-01
      • 2016-12-09
      • 2020-06-18
      • 2014-09-18
      • 2022-01-11
      • 2017-12-13
      • 2014-08-14
      • 2018-11-20
      相关资源
      最近更新 更多