Запретить вход в браузер кнопки «Назад» после выхода в Laravel 5

Я новичок в Laravel 5 и пытаюсь создать простую страницу аутентификации. Моя проблема заключается в том, что я могу выйти из системы правильно после того, как я нажму ссылку на выход, но если я нажму кнопку «Назад» в браузере, все еще могу видеть содержимое страницы, которое на самом деле не следует рассматривать в отношении моего процесса промежуточного программного обеспечения. Я читаю, что могу предотвратить это, отключив кеширование, но не думаю, что это лучший способ сделать это, чтобы как можно улучшить это? Просто мой маршрут выхода

Route::get('logout', array('uses' => 'LoginController@logout')); 

Функция выхода:

 public function logout() { Auth::logout(); // logout user Session::flush(); Redirect::back(); return Redirect::to('pages/login'); //redirect back to login } из public function logout() { Auth::logout(); // logout user Session::flush(); Redirect::back(); return Redirect::to('pages/login'); //redirect back to login } 

Когда пользователь нажимает кнопку «Назад», они фактически не вошли в систему, а только браузер делает то, что он кэшировал из предыдущих просмотров страниц. Пользователь не сможет перемещаться или взаимодействовать с чем-либо, что требует их входа в систему, поскольку для вашего приложения на сервере они не аутентифицируются.

Когда пользователь нажимает кнопку «Назад», у вас нет контроля над этим, так как он не делает запрос на сервер .

Используя кнопку «Назад», единственным контентом, который они смогут просмотреть, является то, что они уже посетили во время входа в систему. Если они попытаются получить доступ к чему-либо новому, они сделают новый запрос к вашему приложению, ваше промежуточное ПО запустит и перенаправить их на страницу входа в систему.

Я думаю, если бы вы действительно хотели остановить это поведение, вы могли бы использовать какой-то JavaScript и такой, чтобы отправить запрос ajax и проверить, зарегистрирован ли пользователь таким образом, но совершенно бесполезен с точки зрения безопасности.

Эти решения работают! Создайте промежуточное программное обеспечение с помощью мастера.

 php artisan make:middleware RevalidateBackHistory 

В промежуточном ПО RevalidateBackHistory мы устанавливаем заголовок в no-cache и revalidate.

 <?php namespace App\Http\Middleware; use Closure; class RevalidateBackHistory { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { $response = $next($request); return $response->header('Cache-Control','nocache, no-store, max-age=0, must-revalidate') ->header('Pragma','no-cache') ->header('Expires','Fri, 01 Jan 1990 00:00:00 GMT'); } } 

Обновление промежуточного программного обеспечения маршрута приложения в Kernel.php

 protected $routeMiddleware = [ . . 'revalidate' => \App\Http\Middleware\RevalidateBackHistory::class, . . ]; 

И это все! Поэтому в основном вам просто нужно вызвать revalidate middleware для маршрутов, для которых требуется аутентификация пользователя.

Шаг 1: создайте одно промежуточное программное обеспечение, используя следующую команду:

 php artisan make:middleware PreventBackHistory 

Шаг 2:

замените содержимое PreventBackHistory.php следующим содержимым:

 <?php namespace App\Http\Middleware; use Closure; class PreventBackHistory { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { $response = $next($request); return $response->header('Cache-Control','no-cache, no-store, max-age=0, must-revalidate') ->header('Pragma','no-cache') ->header('Expires','Sun, 02 Jan 1990 00:00:00 GMT'); } } 

Шаг 3: зарегистрируйте промежуточное программное обеспечение в файле kernal.php

 'preventBackHistory' => \App\Http\Middleware\PreventBackHistory::class, 

И хорошо идти 🙂

Метод, который я использовал, – это просто перенаправить на предыдущую страницу после выхода из системы. До тех пор, пока предыдущая страница была защищена, промежуточное программное обеспечение auth начнет и перенаправит вас обратно на страницу входа. Теперь, когда вы нажимаете кнопку «Назад», предыдущая страница больше не кэшируется, и вы снова получаете страницу входа в систему.

Оригинальное обсуждение: https://laracasts.com/discuss/channels/requests/back-button-browser

 public function logout() { Auth::logout(); // logout user return redirect(\URL::previous()); } из public function logout() { Auth::logout(); // logout user return redirect(\URL::previous()); } 

Попробуйте перенаправить на защищенный маршрут с помощью промежуточного ПО auth :

 return redirect('home'); 

поэтому он будет перенаправлять на страницу входа, а кнопка «Назад» не отображает предыдущую страницу