Я использую Slim для создания API для отдыха и пытаюсь использовать промежуточное ПО для настройки аутентификации / авторизации. Аутентификация работает, однако мне нужно иметь возможность доступа к разрешениям пользователей за пределами промежуточного программного обеспечения, поэтому мне нужен какой-то способ, чтобы получить по вертикали разрешения пользователей или только пользователя (и получить их разрешения позже), или способ убедиться, что то же самое Использование экземпляра Slim также решило бы мою проблему. Я впервые использую 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);
сразу после этого видно, что ничего не записано.
Пожалуйста, дайте мне знать, если мне нужно что-то объяснить, я впервые спрашиваю здесь.
Задача ещё не решена.
Других решений пока нет …