如果esle条件在laravel 5.4中的中间件构造函数中不起作用

时间:2018-08-30 07:41:49

标签: laravel authentication constructor laravel-5.4 middleware

我一次只能使用一个中间件。.在一个构造函数中。.我想在构造函数或两个中间件中使用if else条件。

我只能在构造函数内部使用中间件,否则条件不能正常工作

示例如下

否则

class HRJob extends Controller
{   
    public function __construct()
    {
        if(Auth::guard('admin'))
        {
            $this->middleware('auth:admin');
        }
        else
        {
            $this->middleware('auth');
        }
    }
    public function userdetails()
    {
        dd(Auth::user());
    }
}

两个中间件

class HRJob extends Controller
{  
    public function __construct()

        $this->middleware('auth:admin');
        $this->middleware('auth');
    }

    public function userdetails()
    {
        dd(Auth::user());
    }
}

1 个答案:

答案 0 :(得分:0)

在您的情况下,不需要两个中间件。

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

等同于您尝试执行的操作,因为'auth'对于'auth:admin'仍然有效。

但是您仍然可以像这样将中间件放入Routes文件(web.php / api.php)

Route::group(['middleware'=>'auth:admin'],function (){
    Route::get('/', 'HRJob@userdetailsAdmin');
});

Route::group(['middleware'=>'auth'],function (){
    Route::get('/', 'HRJob@userdetails');
});

希望这会有所帮助。

---编辑---

在您的情况下,使用两个不同的表进行身份验证,而没有为“任何身份验证”创建自定义中间件,那么您只是缺少check()方法:

if (Auth::guard('admin')->check()) {
    $this->middleware('auth:admin');
} else {
    $this->middleware('auth');
}

wich等价于

if (!Auth::guard('admin')->check()) {
    $this->middleware('auth');
}