Slim PHP Framework中间件自定义URL过滤器

时间:2015-06-10 18:45:38

标签: php rest authentication middleware slim

我正在使用Slim Framework创建API。我需要过滤请求身份验证的请求并将它们路由到特定的auth处理程序。或者最好说我需要过滤不需要auth的URI(公共信息)。

我创建了以下中间件skileton

{{1}}

在这种情况下,我无法访问任何没有令牌的URI,如何解决这个问题,允许访问公共资源 我将不胜感激任何帮助。 Thx提前。

2 个答案:

答案 0 :(得分:1)

此处的常见策略是使用规则实施防火墙。

非常简单的防火墙可能会忽略公共资产(即以.jpg,.png,.css,.js等结尾的任何内容)。规则通常只是正则表达式。

示例防火墙配置可能看起来像(注意规则的应用顺序也很重要)。

firewalls:
    # Public assets, anyone can see
    assets:
        expression: \.(js|css)$
        auth: false

    # Everything exception login requires auth
    secure:
        expression: ^(?!login$)
        auth: true

    # Everything else gets through
    public:
        expression: ^/
        auth: false

您是否有框架解析定义并迭代规则。从那里,您可以决定如何处理路由。

答案 1 :(得分:1)

您主要有两种方法:

全球中间件

一种方法是在您的API中添加OAuth中间件,以便检查用户是否经过身份验证并设置标记,然后在每个路由中,您可以检查用户是否经过身份验证。

higherKey

然后你的MyOAuthMiddleware:

<?php
$app = new \Slim\Slim();
$app-authenticated = false;
$app->add(new MyOAuthMiddleware());

现在您可以检查所有路线:

<?php
 class MyOAuthMiddleware extends \Slim\Middleware {
  public function call() {
   //Do your OAUTH check stuff here
   $this->app-authenticated = true;
  }
}

特定路由中间件

您可以关注Slim documentation并选择直接在每个声明中添加您的中间件:

<?php
$app->get('/hello/:name', function ($name) {
   $app = \Slim\Slim::getInstance();
   if($app->authenticated === true){
    echo "Hello, $name";
   } else {
    echo "You need to login";
   }
});