我在我的laravel项目中使用多个身份验证并且工作正常:
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
],
'admins' =>[
'driver' => 'session',
'provider' => 'admins',
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
'admins' => [
'driver' => 'eloquent',
'model' => App\Admin::class,
],
],
但我保护我的一些路线有问题。我想通过两种类型的身份验证保护来访问这些路由。如果' 管理员 '如果' 用户 ' OR ,则保护用户已登录保护用户已登录,我希望能够访问该路由。现在我的路线是这样的:
Route::group(['middleware' =>'auth'], function () {
Route::get('/add/tutorial',[
'uses'=>'AddTutorialController@getAddTutorialIndex',
'as'=>'frontend.add.tutorial'
]);
});
并且只有这一点,我的用户才能使用'警卫可以访问这条路线。
我想要访问类似这样的内容:
Route::group(['middleware' =>['auth' OR 'auth:admins']],...
有没有办法让两个授权警卫都能访问路线?我应该使用哪种中间件组?
答案 0 :(得分:1)
如果您可以在\ app \ Http \ Middleware \ Authenticate.php中添加其他参数,例如:
public function handle($request, Closure $next, $guard = null, $default = false)
{
if($guard && $default) {
// check for specified $guard OR default guard
$authorized = Auth::guard($guard)->guest() || Auth::guard(null)->guest();
} else {
// use specified guard ( or null if non given )
$authorized = Auth::guard($guard)->guest();
}
if ($authorized) {
if ($request->ajax() || $request->wantsJson()) {
return response('Unauthorized.', 401);
} else {
return redirect()->guest('login');
}
}
return $next($request);
}
使用它可以在路由组中指定其他参数:
Route::group(['middleware' => 'auth:admins,true'], function() {
Route::get('/', function () {
dd('inside');
});
});
如果您使用 auth:admins,true ,则会使用OR检查默认警卫和指定警卫(管理员)。
如果您只使用 auth ,则会使用默认防护。如果您使用身份验证:管理员 管理员警卫将仅被使用。
这只是一个简单的例子。您可以根据需要进行调整,甚至可以编写自己的中间件。
答案 1 :(得分:0)
我找到了3种方法,如果你能找到有用的东西: -
第一种方式: -
routes.php
Route::group(['middleware' =>['auth', 'auth:admins']], function () {
Route::get('/add/tutorial',[
'uses'=>'AddTutorialController@getAddTutorialIndex',
'as'=>'frontend.add.tutorial'
]);
});
第二种方式: -
routes.php
Route::get('/add/tutorial',[
'uses'=>'AddTutorialController@getAddTutorialIndex',
'as'=>'frontend.add.tutorial'
])->middleware(['auth', 'auth:admins']);
第三种方式: -
routes.php
Route::get('/add/tutorial',[
'uses'=>'AddTutorialController@getAddTutorialIndex',
'as'=>'frontend.add.tutorial'
])
yourcontroller.php
class YourController extends Controller{
public function __construct(){
$this->middleware(['auth', 'auth:admins']);
}
}