Por que o filtro não funciona quando o botão Voltar do navegador é pressionado no laravel?

Eu tenho uma visão para entrar em uma conta, depois chamou o controlador onde os dados são validados e são salvos com o método de autenticação

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'); } } } 

Eu também tenho a function de sair da session

 Route::get('usuarios/logout', function(){ Auth::logout(); return Redirect::to('usuarios'); //login page })->before('auth'); 

O problema é que quando eu pressionar o botão Voltar do navegador, posso usar sem problemas o aplicativo, mas sem a autenticação.

Rota

 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'); 

Filtro

 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 } }); 

Como posso corrigi-lo?

O problema está relacionado ao cache do navegador , e não ao Laravel.

Para lidar com o cache do navegador, você pode usar o seguinte código em um dos seus arquivos iniciais ou em um provedor de serviços :

 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'); }); 

Aqui estamos apenas modificando cada resposta dentro do Laravel usando events de aplicativos .


Algumas pessoas disseram que isso funciona para todo o navegador, mas não para o IE. Então, para o IE, você deve adicionar um monte de meta tags ao seu layout:

        

O problema reside no cache do navegador, quando você volta, o navegador não consulta tudo, por uma questão de velocidade, apenas carrega a página do cache. Mas quando você recarregar essa página, ctrl + r não funcionará. Você pode desativar o armazenamento em cache de páginas como outras pessoas ditas aqui, mas isso lhe custará o desempenho do site e mais contas se você estiver hospedando uma nuvem. Então, o cache é bom, mantenha-o.

Você deve tentar agrupar todas as páginas que precisam de filtro de auth para que você não se esqueça de adicionar esse filtro, somos todos humanos, às vezes esquecemos.

 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'); }]); 

Além disso, tente não exibir a página principal do usuário na post login, no seu caso doLogin . Você deve redirect o usuário para uma nova página que mostra a página inicial do usuário.