Php 当使用SLIM时,中间件是否可以向应用程序添加值
我正在使用slim创建一个restapi,并尝试使用中间件来设置身份验证/授权。身份验证正在工作,但是我需要能够访问中间件之外的用户权限,因此我需要某种方法来返回用户权限或仅返回用户权限(稍后再获取用户权限),或者,确保使用相同的slim实例的方法也可以解决我的问题。这是我第一次在项目中使用slim和中间件,不确定如何做到这一点,或者如果这实际上是不可能的,我应该使用另一种方法 中间件如下所示:Php 当使用SLIM时,中间件是否可以向应用程序添加值,php,authentication,middleware,slim,Php,Authentication,Middleware,Slim,我正在使用slim创建一个restapi,并尝试使用中间件来设置身份验证/授权。身份验证正在工作,但是我需要能够访问中间件之外的用户权限,因此我需要某种方法来返回用户权限或仅返回用户权限(稍后再获取用户权限),或者,确保使用相同的slim实例的方法也可以解决我的问题。这是我第一次在项目中使用slim和中间件,不确定如何做到这一点,或者如果这实际上是不可能的,我应该使用另一种方法 中间件如下所示: class TokenOverBasicAuth extends \Slim\Middleware
class TokenOverBasicAuth extends \Slim\Middleware
{
protected $settings = array(
'realm' => 'Protected Area',
'root' => '/'
);
public function __construct(array $config = array())
{
if (!isset($this->app)) {
$this->app = \Slim\Slim::getInstance();
}
$this->config = array_merge($this->settings, $config);
}
public function call()
{
$req = $this->app->request();
$res = $this->app->response();
$authUser = $req->headers('PHP_AUTH_USER');
$authToken = $req->headers('PHP_AUTH_PW');
if (preg_match('|^/api/v.*$|', $req->getPath(), $req->getResourceUri()) && (!($authToken && $authUser && $this->verify($authUser, $authToken)))) {
$res->status(401);
$res->header(
'WWW-Authenticate',
sprintf('Basic realm="%s"', $this->config['realm'])
);
$res->body(json_encode(array("401" => '401 Unauthorized',
"status" => '401')
));
} else {
$this->next->call();
}
}
protected function verify($authUser, $authToken)
{
$user = // A call yo the database for user details based on token and password
if (false !== $user && count($user) == 1) {
$this->app->user = $user;
if ( ! empty ($u->permission->access)) {
$u->permission->access = unserialize($this->app->user->permission->access);
}
// calling print_r($this->app->user); here shows expected results
return true;
}
return false;
}
我正在使用以下命令调用引导程序中的中间件:
$app->add(new API\Middleware\TokenOverBasicAuth(array('root' => '/api/v1')));
试图访问用户的值,例如,print\r($app->user)代码>直接在这之后显示没有任何记录
如果我还需要解释什么,请告诉我,这是我第一次在这里提问。你到底在哪里打电话给print\r($app->user)?你试过在一条路线内打电话吗?我试过在很多地方打电话,包括一条路线。目前,我正在考虑尝试创建一个单独的方法来检查可以在中间件内部和外部调用的auth,这样我就可以用这种方式恢复用户。