Как сделать перенаправление с промежуточного ПО Slim 4? - PullRequest
0 голосов
/ 17 октября 2019

Я тестировал новую платформу Slim 4, и перенаправления отлично работают для меня в обычных классах, но я не могу заставить их работать в промежуточном программном обеспечении, где обработчик запросов динамически генерирует (очевидно?) Ответ. Когда я пытаюсь перенаправить заголовок Location, он просто не перенаправляется, и мой маршрут продолжает исходное местоположение.

Вот базовая версия моего промежуточного программного обеспечения для проверки подлинности:

use Psr\Http\Message\ServerRequestInterface as Request;
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Server\RequestHandlerInterface as RequestHandler;

class AuthMiddleware extends Middleware {

    public function __invoke(Request $request, RequestHandler $handler): Response {
        $response = $handler->handle($request);
        $loggedInTest = false;
        if ($loggedInTest) {
            echo "User authorized.";
            return $response;
        } else {
            echo "User NOT authorized.";
            return $response->withHeader('Location', '/users/login')->withStatus(302);
        }
    }
}

Кто-нибудь заставил это работать? И если да, то как ты это сделал? Заранее спасибо.

1 Ответ

0 голосов
/ 18 октября 2019

Хорошо, я идиот.

Я так расстроился из-за проблем Slim 4 и перенаправления, что взглянул на FatFreeFramework и, черт побери, у меня не было ТОЧНОЙ проблемы. Так что я знал, что это было то, что я делал. Короче говоря ...

Мой код помещал приложение в бесконечный цикл перенаправления. Я могу заставить его работать, проверяя URL-адрес перенаправления, например, в FatFreeFramework:

class Controller {

    protected $f3;

    public function __construct() {
        $isLoggedIn = false;
        $this->f3 = Base::instance();
        if ($isLoggedIn == false && $_SERVER['REQUEST_URI'] != '/login') {
            $this->f3->reroute('/login');
            exit();
        }
    }
}

Поэтому, хотя на самом деле я не потратил время на его тестирование, я предполагаю, что могу исправить это в Slim 4делая что-то вроде:

use Psr\Http\Message\ServerRequestInterface as Request;
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Server\RequestHandlerInterface as RequestHandler;

class AuthMiddleware extends Middleware {

    public function __invoke(Request $request, RequestHandler $handler): Response {
        $response = $handler->handle($request);
        $loggedInTest = false;
        if (!$loggedInTest && $_SERVER['REQUEST_URI'] != '/user/login') {
            return return $response->withHeader('Location', '/users/login')->withStatus(302);
        } else {
            return $response;
        }
    }
}

У кого-нибудь есть другая идея о том, как разорвать непрерывный цикл перенаправления? Или переменная $ _SERVER - лучший вариант?

Заранее спасибо.

...