Выход из Laravel не работает при нажатии кнопки возврата

При выходе из моего приложения Laravel с использованием метода выхода Laravel:

public function getLogout() { Auth::logout(); return Redirect::to('users/login')->with('message', '<div class="alert alert-success">Your have successfully logged out</div>'); } 

Я успешно вышел из системы, но, нажав кнопку «Назад», я могу получить доступ к моей учетной записи. Любая идея о том, как я могу это исправить?

Я новичок в laravel, поэтому я не уверен, имеет ли смысл мой вопрос. Ну, в простой PHP, ручная перезагрузка сеанса до нуля всегда выполняла эту работу для меня.

Вот как я решил это в промежуточном программном обеспечении Laravel 5:

Создайте промежуточное ПО NoCache следующим образом:

Пройдите это: Как мне реализовать до и после фильтров в промежуточном программном обеспечении?

 class NoCache { public function handle($request, Closure $next) { $response = $next($request); $response->headers->set('Cache-Control','nocache, no-store, max-age=0, must-revalidate'); $response->headers->set('Pragma','no-cache'); $response->headers->set('Expires','Fri, 01 Jan 1990 00:00:00 GMT'); return $response; } } 

Затем зарегистрируйте это промежуточное программное обеспечение в kernel.php: Запуск промежуточного программного обеспечения по каждому запросу

На самом деле это не так, как вы думаете.

Кнопка «Назад» в браузере извлекает последнюю страницу в кеше для вас.

Если вы действительно должны это предотвратить, у вас есть два варианта:

  1. Отключить кеширование (обычно это плохая идея). См. Раздел Как управлять кэшированием веб-страниц во всех браузерах? для этого.
  2. Попросите JavaScript сохранить ресурс на странице и перенаправить пользователя, если этот keepalive показывает, что пользователь не вошел в систему.

Лично я просто виню кэширование и игнорирую его. Существует также третий вариант: использование API истории HTML5, но это, вероятно, путь сверху.

Я пробовал с этим, и он работает.

В маршрутах:

 Route::group(array('before' => 'auth', 'after' => 'no-cache'), function() { Route::get('dashboard', array('as' => 'getDashboard', 'uses' => 'DashboardController@getIndex')); Route::get('logout', array('as' => 'getLogout', 'uses' => 'LoginController@getLogout')); Route::group(array('prefix' => 'users'), function() { Route::get('users', array('as' => 'getUsers', 'uses' => 'UsersController@getIndex', 'before' => 'hasAccess:users.index')); }); }); 

В фильтрах:

 Route::filter('no-cache',function($route, $request, $response){ $response->headers->set('Cache-Control','nocache, no-store, max-age=0, must-revalidate'); $response->headers->set('Pragma','no-cache'); $response->headers->set('Expires','Fri, 01 Jan 1990 00:00:00 GMT'); }); 

Да. Как писал @Amelia, эта проблема связана с кешем браузера, но не с Laravel. Отправка ответа без кеша – одно решение, но это не всегда хорошо. Возможно, вам придется заплатить дополнительный хостинг, если вы реализуете это решение.

Я попытался решить эту проблему с помощью некоторого кода javascript в базовом шаблоне перед </body> .

 <script type="text/javascript"> $(document).ready(function() { var isAuth = "<?php echo Auth::check(); ?>"; if (location.href === 'http://local.myapp.in/login/') { if (isAuth) location.href('/home'); } else { if (!isAuth) location.href('/login'); } }); </script> 

В приведенном выше коде замените http://local.myapp.in/login/ URL-адрес вашей учетной записи. Поэтому каждый раз, когда страница загружается, этот код запускается. Если пользователь пытается получить доступ к любой ограниченной странице без регистрации, то он будет перенаправлен на страницу входа в систему. И если пользователь пытается получить доступ к странице login при login систему, браузер будет перенаправлен на home страницу.

Так как это код js, даже если страница загружена из кеша браузера, этот фрагмент кода запускается.