Laravel logout, hittin gthe кнопка Назад отправить меня обратно в приложение, как я могу предотвратить это
В настоящее время я использую стандартные контроллеры laravel login/auth, маршруты, представления и никакой пользовательской логики. Мы создаем приложение, в котором, если вы выйдете из системы и нажмете кнопку "назад", вы ни при каких обстоятельствах не сможете вернуться в приложение, даже если у вас нет сеанса."
Есть ли способ, чтобы кнопка "назад" при нажатии после выхода из системы не отправляла вас обратно в приложение? Как будто мы не можем ничего показать, как только вы нажмете кнопку Назад. Он должен попасть на экран ошибки laravel или автоматически отправить вас обратно в систему.
Все мои контроллеры имеют $this->middleware('auth');
который должен автоматически отправить вас обратно на экран входа.




Ответы - Laravel logout, hittin gthe кнопка Назад отправить меня обратно в приложение, как я могу предотвратить это / Laravel logout, hittin gthe back button send s me back into the app, how do I prevent this

25.01.2020 05:21:55
вы можете легко маршрутизировать весь трафик через auth middleware в классе route, используя route group :
Auth::routes(); // exclude auth route from being guarded
Route::group(['middleware' => 'auth'], function()
{
// add all your routes here
Route::get('/',function (){
return view('welcome);
});
});
Редактирование 1: Чтобы запретить пользователю использовать кэшированную версию, пожалуйста, посмотрите на эту статью https://twitteinfo.com/laravel-5-how-to-prevent-browser-back-button-after-user-logout/





26.01.2020 06:36:13
После долгого тестирования я обнаружил, что единственным решением является принудительное использование заголовка no-store в ответе всех "безопасных" страниц, чтобы браузер не кэшировал его. В медленных сетях это может привести к небольшой задержке загрузки страницы. Это влияет только на возвращаемый ответ, ни один из ресурсов, загруженных страницей, не затрагивается. Их все еще можно кэшировать.
Создание нового промежуточного программного обеспечения с php artisan make:middleware NoCacheHeaders
Редактировать, как предложено ниже
<?php
namespace App\Http\Middleware;
use Closure;
class NoCacheHeaders
{
/**
* Add set no caching HTTP headers.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string|array $options
* @return \Symfony\Component\HttpFoundation\Response
*
* @throws \InvalidArgumentException
*/
public function handle($request, Closure $next, $options = [])
{
$response = $next($request);
$response->header('Expires', 'Fri, 01 Jan 1990 00:00:00 GMT');
$response->header('Cache-Control', 'no-cache, must-revalidate, no-store, max-age=0, private');
return $response;
}
}
Добавьте это промежуточное ПО в \App\Http\Kernel.php
в routeMiddleware
теперь middleware 'nocache' => \App\Http\Middleware\NoCacheHeaders::class,
можно добавлять в группы или отдельные маршруты. Я добавляю во все стороны защищена nocache
auth
Теперь, после просмотра защищенных страниц, выхода из системы и возврата обратно, предыдущие страницы не раскрываются.

27.01.2020 12:24:29
Если вы просто хотите предотвратить использование кнопки "назад" и на самом деле не заботитесь о том, что пользователь может удерживать кнопку "назад" и переходить на более ранние страницы, то следующее отключает кнопку "Назад".
(конечно, вы можете использовать как отключить кэш, так и отключить кнопку Назад)
Создайте новое представление "выход из системы"
Это необязательно, но означает, что вы можете добавить javascript, не беспокоясь о влиянии на любую другую функциональность.
@extends('layouts.app',[$title='Logout | '])
@section('content')
<div class="container mx-auto">
<div class="flex flex-wrap justify-center">
<div class="w-full max-w-md">
<h1 class="text-2xl text-gray-700 text-center">You have been successfully logged out</h1>
<p class='mt-8 text-xl text-indigo-800 text-center underline'><a href="{{ route('login') }}">Login?</a></p>
<script type="text/javascript">
history.pushState(null, null, `{{ route('logout') }}`);
window.addEventListener('popstate', function () {
history.pushState(null, null, `{{ route('logout') }}`);
});
</script>
</div>
</div>
</div>
@endsection
Создайте маршрут для отображения страницы выхода из системы
Route::view('/logout','auth.logout')->name('logout');
Измените контроллер входа, чтобы перейти к представлению выхода
Добавьте следующий код где-нибудь внутри App\Http\Controllers\Auth\LoginController.php
private function loggedOut($request)
{
return redirect(route('logout'));
}