Перенаправление с промежуточного программного обеспечения в Laravel не работает должным образом - PullRequest
1 голос
/ 28 апреля 2020

Я работаю над реагирующим проектом laravel и пытаюсь защитить маршруты панели инструментов с помощью промежуточного программного обеспечения, вот код из промежуточного программного обеспечения

public function handle($request, Closure $next)
{
    $apiToken = $request->bearerToken();
    $isAuthenticated = User::where('api_token', $apiToken)
                            ->where('is_admin', true)
                            ->first();

    if(!$isAuthenticated) {
        return redirect('/');
    }

    return $next($request);
}

Теперь проблема заключается в пользователь не аутентифицирован, промежуточное ПО не перенаправляет на нужный маршрут, вместо этого он возвращает страницу html в виде текста в ответе следующим образом. Ответ в случае не аутентифицированного пользователя

  <!DOCTYPE html>
  <html lang="en">
    <head>
        <meta charset="utf-8"/>
        <meta name="viewport" content="width=device-width, initial-scale=1"/>
        <meta name="theme-color" content="#000000"/>
        <meta name="description" content="Web site created using create-react-app"/>
        <link rel="stylesheet" href="http://localhost/css/app.css">
        <title>Some Title Here</title>
    </head>
    <body>
        <noscript>You need to enable JavaScript to run this app.</noscript>
        <div id="root"></div>
        <script src="http://localhost/js/app.js"></script>
    </body>
  </html>

Я пытался использовать

return redirect()->route('/');

, но, к сожалению, он тоже не работает.

Я также пытался вызвать исключение 401 с помощью

abort(401)

И поймать его в обработчике исключений и перенаправить оттуда (как я сделал с исключениями 404 и 500, и я был перенаправлен успешно), но это не работает, и я получил то же ответное сообщение с отправленной страницей как текст в ответе, так что проблема, вероятно, с перенаправлением из промежуточного программного обеспечения, может кто-нибудь помочь мне найти проблему, пожалуйста?

Ответы [ 2 ]

1 голос
/ 29 апреля 2020

Поэтому, как инженер переднего плана, я выбрал создание кратчайшего пути и перенаправил пользователя с помощью реакции и топора ios, поэтому в середине я просто выбросил httperror со статусом 401 (не авторизован), а затем поймал его по топору ios следующим образом: Мое промежуточное ПО

    if(!$isAuthenticated) {
      return abort(401);
   }

реакция

const instance = axios.create({
    baseURL: API_PREFIX
});

instance.interceptors.response.use(
    response => {
        return response;
    },
    function(error) {
        if (error.response.status === 401) {
            window.location.replace("/");
        }
        return Promise.reject(error.response);
    }
);

Ссылки, которые мне помогли: GitHub

0 голосов
/ 28 апреля 2020

return redirect('/'); перенаправит пользователя в каталог publi c вашего проекта.

Добавить имя к нужному маршруту, например:

Route::get('/route', 'API\Controller@index')->name('route name');

Затем вы можете перенаправить на указанный маршрут:

if(!$isAuthenticated) {
        return route('route name');
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...