我一次只能使用一个中间件。.在一个构造函数中。.我想在构造函数或两个中间件中使用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());
}
}
答案 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');
}