Я новичок в 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');
поэтому он будет перенаправлять на страницу входа, а кнопка «Назад» не отображает предыдущую страницу