У меня есть представление о входе в учетную запись, затем вызывается контроллер, где данные проверяются и затем сохраняются с помощью метода аутентификации
public function doLogin(){ $rules = array( 'email' => 'required|email', 'password' => 'required' ); $validator = Validator::make(Input::all(), $rules); //dd(Input::all()); if($validator->fails()){ return Redirect::to('usuarios')->withErrors($validator)->withInput(Input::except('password')); }else{ $userdata = array( 'email' => Input::get('email'), 'password' => Input::get('password') ); if(Auth::attempt($userdata)){ return View::make('principal'); }else{ return Redirect::to('usuarios'); } } }
У меня также есть функция выхода из сеанса
Route::get('usuarios/logout', function(){ Auth::logout(); return Redirect::to('usuarios'); //login page })->before('auth');
изRoute::get('usuarios/logout', function(){ Auth::logout(); return Redirect::to('usuarios'); //login page })->before('auth');
Проблема в том, что когда я нажимаю кнопку «Назад» браузера, я могу без проблем использовать приложение, но без аутентификации.
маршрут
Route::get('usuarios', function(){ return View::make('login'); })->before('guest'); Route::get('usuarios/view', function(){ $usuarios = Usuario::paginate(5); return View::make('viewusuario', array('usuarios' => $usuarios)); })->before('auth'); Route::get('usuario/create', function(){ return View::make('formusuario'); })->before('auth');
Фильтр
Route::filter('auth', function() { if (Auth::guest()) return Redirect::guest('usuarios'); //login page }); Route::filter('guest', function() { if (Auth::check()){ return View::make('principal'); //home page } });
Как я могу это исправить?
Проблема связана с кешем браузера , а не с Laravel.
Для обработки кеша браузера вы можете использовать следующий код в одном из ваших стартовых файлов или в поставщике услуг :
App::after(function($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'); });
Здесь мы просто модифицируем каждый ответ в Laravel, используя события приложения .
Некоторые люди говорили, что это работает для всего веб-браузера, но не для IE. Поэтому для IE вы должны добавить кучу метатег в свой макет:
<meta http-equiv="cache-control" content="max-age=0" /> <meta http-equiv="cache-control" content="no-cache" /> <meta http-equiv="cache-control" content="no-store" /> <meta http-equiv="cache-control" content="must-revalidate" /> <meta http-equiv="expires" content="0" /> <meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" /> <meta http-equiv="pragma" content="no-cache" />
Проблема заключается в кеше браузера, когда вы возвращаетесь назад, браузер не запрашивает все, ради скорости он просто загружает страницу из кеша. Но когда вы перезагружаете эту страницу ctrl + r
она не будет работать. Вы можете отключить кеширование страниц, как говорят другие люди, но это будет стоить вам производительности веб-сайта и дополнительных счетов, если вы находитесь на облачном хостинге. Так что кеш хорош, держите его.
Вы должны попытаться сгруппировать все страницы, на которых нужен фильтр auth
поэтому вы не забудьте добавить этот фильтр, мы все люди, иногда мы забываем.
Route::group(['before' => 'auth', function(){ Route::get('usarios/view', function() { ... }); Route::get('usarios/create', function() { ... }); }]); Route::group(['before' => 'guest', function(){ Route::get('usarios/login', 'AuthController@showLogin'); Route::post('usarios/login', 'AuthController@doLogin'); }]);
Кроме того, попробуйте не отображать главную страницу пользователя в учетной записи, в вашем случае doLogin
. Вы должны перенаправить пользователя на новую страницу с домашней страницей пользователя.