我正在使用Slim Framework创建API。我需要过滤请求身份验证的请求并将它们路由到特定的auth处理程序。或者最好说我需要过滤不需要auth的URI(公共信息)。
我创建了以下中间件skileton
{{1}}
在这种情况下,我无法访问任何没有令牌的URI,如何解决这个问题,允许访问公共资源 我将不胜感激任何帮助。 Thx提前。
答案 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";
}
});