Перенаправление с HTTP 403 - PullRequest
       34

Перенаправление с HTTP 403

0 голосов
/ 08 января 2020

Я использую Slim PHP и хочу перенаправить пользователя на /login, если они не вошли в систему, но пытаются зайти на страницу, требующую входа пользователя. При поиске, как собрать свое промежуточное ПО Я нахожу варианты этого кода повсюду

class Auth{    
    public function requireLogin(Request $request, Response $response, $next){
        if( !isLoggedIn() ) return $response->withRedirect('/login', 403);

        return $next($request, $response);
    }    
}

, например, в этом SO-ответе и в этом тонком дискурсивном ответе .

Проблема в том, что я не могу заставить работать комбинацию перенаправления и HTTP 403. Из того, что я могу сказать, нормальные перенаправления HTTP ограничены HTTP-кодами 3xx . Действительно, приведенный выше код прекрасно работает, например, с 302.

Я что-то упустил или все ответы, которые объединяют withRedirect и 403, "неверны" (например, не вызывают актуальное перенаправление браузера пользователя)?

1 Ответ

0 голосов
/ 14 января 2020

Если ваше приложение является веб-сайтом HTML, доступ к которому осуществляется через веб-браузер, то браузер будет перенаправлять только в том случае, если код состояния - 3xx.

Если ваше приложение представляет собой API, доступ к которому осуществляется через HTTP-клиент, у вас есть больше возможностей. Для API вы должны использовать код состояния 403 или 401, чтобы указать, что запрос не может быть выполнен без авторизации. Вы также можете включить заголовок Location, чтобы сообщить клиенту, где go, чтобы получить авторизацию, но, разумеется, клиенту решать, перейдут ли они по этой ссылке.

...