Laravel中间件没有重定向到自定义登录页面



我为管理员设置了两个中间件,为客户设置了一个中间件

class AuthenticateCustomer
{
public function handle($request, Closure $next)
{
if (! Auth::guard('customer')->check()) {
return redirect(route('customer.login'));
}
return $next($request);
}
}

管理员的是

class AuthenticateAdmin
{
public function handle($request, Closure $next)
{
if (! Auth::guard('admin')->check()) {
return redirect(route('admin.login'));
}
return $next($request);
}
}

然而,我仍然被引导到Laravel内置的登录页面auth.login。我的中间件似乎没有被使用。

您应该为apphttpKernel.php中的中间件添加一个别名,如下所示:

protected $routeMiddleware = [
'customerAuth' => AppHttpMiddlewareAuthenticateCustomer::class,
'adminAuth' => AppHttpMiddlewareAuthenticateAdmin::class,
]

然后在你的路线上使用它,如下所示:

// For customer
Route::group(['middleware' => 'customerAuth'],function (){
Route::get('test',function (){

});
});
// For admin
Route::group(['middleware' => 'adminAuth'],function (){
Route::get('test',function (){

});
});

您配置auth.php了吗?如果没有,则配置auth.php。打开config/auth.php并添加新的防护编辑,如下所示:

/*
|--------------------------------------------------------------------------
| Authentication Guards
|--------------------------------------------------------------------------

*/
//For User
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
'hash' => false,
],
//For Admin
'admin' => [
'driver' => 'session',
'provider' => 'admins',
],
'admin-api' => [
'driver' => 'token',
'provider' => 'admins',
'hash' => false,
],
],
/*
|--------------------------------------------------------------------------
| User Providers
|-----------------------------------------------------------------------
*/
'admins' => [
'driver' => 'eloquent',
'model' => AppModelsAdmin::class,
],

如果您想使用相同的控制器,也可以修改LoginControl,然后在app/Http/Controllers/Auth中打开登录控制器,并按如下方式编辑:

class LoginController extends Controller
{
[...]
public function __construct()
{
$this->middleware('guest')->except('logout');
$this->middleware('guest:admin')->except('logout');
}
[...]
}

最新更新