可以通过在中间件中手动指定Guard以实现检查用户认证状态的功能。
示例代码:
use Illuminate\Auth\Middleware\Authenticate;
class CustomAuthMiddleware extends Authenticate
{
protected function authenticate($request, array $guards)
{
if (! empty($guards)) {
// 手动指定Guard
$this->auth->shouldUse($guards[0]);
}
parent::authenticate($request, $guards);
}
}
在路由中使用该中间件:
Route::get('dashboard', function () {
// Auth::check会比较当前Guard的认证状态
})->middleware('auth.custom:api');
上述代码中,我们继承了Laravel内置的Authenticate中间件,并重写了其中的authenticate()方法。该方法充当父类原方法的拦截器,当用户通过中间件进入该方法时,会在手动指定Guard之后执行父类的原方法。这样就可以在中间件中获取用户的当前认证状态了。