【问题标题】:Slim Authentication middleware for all routes except someone用于除某人之外的所有路由的 Slim 身份验证中间件
【发布时间】:2019-06-17 10:45:38
【问题描述】:

我想要一个 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,但它并没有改变结果。

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

【问题讨论】:

    标签: php authentication middleware slim-3


    【解决方案1】:

    你需要选择不同的方法

    您需要包装所有应该“通过 Auth 中间件保护”的路由,并且 exclude = 不包装不应由该中间件处理的路由

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

    类似

    $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
    

    【讨论】:

    • 是的,谢谢,似乎没有其他选择来反转逻辑。
    猜你喜欢
    • 2021-07-03
    • 2016-09-05
    • 2021-12-06
    • 1970-01-01
    • 2020-07-23
    • 2018-07-25
    • 2018-12-27
    • 2020-04-29
    • 1970-01-01
    相关资源
    最近更新 更多