Запретить вход в браузерную кнопку браузера после выхода из системы в Laravel 5
Я новичок в Laravel 5 и пытаюсь сделать простую страницу аутентификации. Моя проблема заключается в том, что я могу выйти из системы правильно после того, как я нажму ссылку на выход, но если я нажму кнопку "Назад" в браузере, все еще могу видеть содержимое страницы, которое на самом деле не следует рассматривать в отношении моего процесса промежуточного программного обеспечения. Я читаю, что могу предотвратить это, отключив кеширование, но не думаю, что это лучший способ сделать это, чтобы как можно улучшить это? Просто мой маршрут выхода
Route::get('logout', array('uses' => '[email protected]'));
Функция выхода:
public function logout() {
Auth::logout(); // logout user
Session::flush();
Redirect::back();
return Redirect::to('pages/login'); //redirect back to login
}
Ответы
Ответ 1
Когда пользователь нажимает кнопку "Назад", они действительно не, а только браузер, отображающий то, что он кэшировал из предыдущих просмотров страниц. Пользователь не сможет перемещаться или взаимодействовать с чем-либо, что требует их входа в систему, потому что для вашего приложения на сервере они не аутентифицируются.
Когда пользователь нажимает кнопку назад, у вас нет контроля над этим как , он не делает запрос на сервер.
Используя кнопку "Назад", единственным контентом, который они смогут просмотреть, является то, что они уже посетили во время входа в систему. Если они попытаются получить доступ к чему-либо новому, они сделают новый запрос к вашему приложению, ваше промежуточное ПО вызовет и перенаправит их на страницу входа.
Я думаю, если бы вы действительно хотели остановить это поведение, вы могли бы использовать какой-то JavaScript и такой, чтобы отправить запрос ajax и проверить, зарегистрирован ли пользователь таким образом, но совершенно бесполезен с точки зрения безопасности.
Ответ 2
Это решение работает! Создайте промежуточное программное обеспечение, используя ремесленника.
php artisan make:middleware RevalidateBackHistory
В промежуточном программном обеспечении RevalidateBackHistory мы устанавливаем для заголовка значение no-cache и выполняем повторную проверку.
<?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 для маршрутов, которые требуют аутентификации пользователя.
Ответ 3
Шаг 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,
И хорошо идти:)
Ответ 4
Метод, который я использовал, - просто перенаправить на предыдущую страницу после выхода из системы. Пока предыдущая страница была защищена, промежуточное программное обеспечение авторизации активируется и перенаправляет вас обратно на страницу входа. Теперь, когда вы нажимаете кнопку "Назад", предыдущая страница больше не кэшируется, и вы просто получаете страницу входа снова.
Исходное обсуждение: https://laracasts.com/discuss/channels/requests/back-button-browser
public function logout() {
Auth::logout(); // logout user
return redirect(\URL::previous());
}
Ответ 5
Попробуйте перенаправить на защищенный маршрут с помощью auth:
return redirect('home');
чтобы он перенаправлял страницу входа в систему, а кнопка "Назад" не отображает предыдущую страницу