用于除 someone 之外的所有路由的 Slim 身份验证中间件

Slim Authentication middleware for all routes except someone

我想要一个 Slim 中间件来检查所有请求的身份验证,但一些特定请求(例如登录页面)。 我准备了第一个 AuthenticationMiddleware 中间件来检查所有页面:

$app->add(new \App\Middleware\AuthenticationMiddleware($container));

然后我创建另一个 AnonymousMiddleware 它应该添加一个变量来设置身份验证检查的异常:

$app->group('',function() use ($app){
    $app->get('/','LogicController:index');    
})->add(new AnonymousMiddleware($container));

问题是路由中间件(AnonymousMiddleware)应用在通用中间件(AuthenticationMiddleware)之后;

我尝试使用 determineRouteBeforeAppMiddleware 但它并没有改变结果。

我知道我会为所有经过身份验证的路由设置一个路由中间件,但如果我忘记它听起来有点危险,所以,我更愿意设置哪个路由器不在身份验证下,然后继续检查所有其他路由。

你需要选择不同的方法

你需要包装所有应该是 "protected via Auth middleware" 的路由并且排除 = 不包装不应由该中间件处理的路由

您可以添加一个组,您的所有路由都将存在于该组中,并且只有登录(和注销)路由会在该组之外;)

类似

$app->group("/api/v1", function() { 
 // all your protected routes definitions here
})
->add(AuthenticationMiddleware::class)); // wrap by middleware

$app->post('/login', function(){});

$app->add(new MiddlewareForAllRoutes()); // middlewares for all routes