Я пытаюсь разработать простой метод аутентификации. Если у пользователя есть правильный токен доступа, приложение продолжит работу, в противном случае оно закроется с кодом состояния 401 (неавторизованным).
У меня есть что-то вроде этого:
api.php
...
$headers = getallheaders();
$auth = new OAuth2Auth($headers, $authconfig);
$app->add($auth, $dbconfig);
$app->post('/user', function($req, $res, $args) {
//MY CODE ONLY FOR LOGGED IN USERS
});
OAuth2Auth.php
public function __construct($headers, $dbconfig) {
$this->whiteList = array('\/auth');
$this->config = $dbconfig;
$this->headers = $headers;
}
public function __invoke($req, $res, $next) {
$authHeader = $this->headers['Authorization']; //grabbing the token
$auth = new AuthService($this->dbconfig);
$validated = $auth->verifyOAuth($authHeader); //Verifying Token against DB
if ($validated){
$response = $next($request, $response);
}else{
//EXIT, STOP or HALT
}
return $response;
}
Я пробовал многократное решение, чтобы избежать промежуточного программного обеспечения, чтобы продолжить его выполнение, но ничего не работает. приложение всегда выполняет то, что находится внутри $ app-> post (‘/ user’ …). Я нашел несколько решений для Slim v2, но пока ничего не подходит для Slim v3. Благодарю.
Кажется, что Slim v3 обрабатывает немного другое Middleware по сравнению с v2. Ответ состоял в том, чтобы создать мой собственный ответ $ как это:
public function __invoke($req, $res, $next) {
$authHeader = $this->headers['Authorization']; //grabbing the token
$auth = new AuthService($this->dbconfig);
$validated = $auth->verifyOAuth($authHeader); //Verifying Token against DB
if ($validated){
return $response = $next($request, $response)
->withStatus(200);//OK
}else{
return $response->withStatus(403);//Forbidden
}
}
Это помогло мне
Как использовать Middleware для управления потоком аутентификации
Других решений пока нет …