我的应用程序遇到问题。 让有两个中间件 1)用户 2)管理员 是否可以在控制器中获得我认证的中间件? 我正在使用Laravel 5.4。 这是我的路线声明
Route::group(['prefix' => 'user'], function () {
Route::group(['middleware' => ['auth:api']], function () {
Route::post('shop/store', 'ApiShopController@shopStore');
Route::post('shop/update', 'ApiShopController@shopUpdate');
});
});
Route::group(['prefix' => 'admin'], function () {
Route::group(['middleware' => ['auth:admin-api']], function () {
Route::post('shop/store', 'ApiShopController@shopStore');
Route::post('shop/update', 'ApiShopController@shopUpdate');
});
});
这是我的中间件声明
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
],
'admin' => [
'driver' => 'session',
'provider' => 'admins',
],
'admin-api' => [
'driver' => 'token',
'provider' => 'admins',
],
]
答案 0 :(得分:0)
您可以将其包含在Controller构造函数中,以直接在中间件中进行分配,例如:
class HomeController extends Controller
{
public function __construct()
{
$this->middleware('auth');
}
public function index()
{
return view('home');
}
}
您也可以在控制器中运行此方法,但我尚未对其进行检查:
$middleware = $this->getMiddleware();
那应该返回控制器中的中间件
答案 1 :(得分:0)
如果您的应用在config/auth.php
...
'admin' => [
'driver' => 'session',
'provider' => 'admin',
],
'user' => [
'driver' => 'session',
'provider' => 'user',
],
,那么您可以得到当前的警卫
@if(Auth::guard('admin')->check())
Hello {{Auth::guard('admin')->user()->name}}
@elseif(Auth::guard('user')->check())
Hello {{Auth::guard('user')->user()->name}}
@endif
答案 2 :(得分:0)
您应该使用Auth :: guard('role')
答案 3 :(得分:0)
我对中间件的理解是帮助您对允许访问特定路由/资源或在请求到达您的Laravel应用中的资源之前拦截请求的人进行筛选,这就是为什么在路由声明期间或何时将其放置在正确位置的原因构造函数是 constructed ;选中Middleware Introduction
但是,对于您的情况,我将重构路由声明,如下所示:
Route::group(['middleware' => ['auth:api']], function () {
Route::group(['prefix' => 'user'], function () {
Route::post('shop/store', 'ApiShopController@shopStore');
Route::post('shop/update', 'ApiShopController@shopUpdate');
});
Route::group(['middleware' => ['auth:admin-api']], function () {
Route::group(['prefix' => 'admin'], function () {
Route::post('shop/store', 'ApiShopController@shopStore');
Route::post('shop/update', 'ApiShopController@shopUpdate');
});
});
});
不过,我的观察是,例如,对user/shop/store
的调用将在ApiShopController中击中shopStore
的{{1}}方法。
我建议您要么为每个路由指定要使用的方法,要么不需要中间件,因为您将需要admin/shop/store
条条件来检查中间件本应完成的工作或者您为每个中间件组使用不同的控制器。
PS:让我知道您的问题是否遗漏了
答案 4 :(得分:0)
该配置具有当前的默认防护。如果您使用asi-stage-prefix/sugar-naa/c2b1113a-5111-47cd-839d-79f7111caff0
中间件,那么哪个身份验证将被设置为当前默认值:
auth