Laravel logout, hittin gthe кнопка Назад отправить меня обратно в приложение, как я могу предотвратить это

Laravel logout, hittin gthe кнопка Назад отправить меня обратно в приложение, как я могу предотвратить это

24.01.2020 11:54:07 Просмотров 38 Источник

В настоящее время я использую стандартные контроллеры laravel login/auth, маршруты, представления и никакой пользовательской логики. Мы создаем приложение, в котором, если вы выйдете из системы и нажмете кнопку "назад", вы ни при каких обстоятельствах не сможете вернуться в приложение, даже если у вас нет сеанса."

Есть ли способ, чтобы кнопка "назад" при нажатии после выхода из системы не отправляла вас обратно в приложение? Как будто мы не можем ничего показать, как только вы нажмете кнопку Назад. Он должен попасть на экран ошибки laravel или автоматически отправить вас обратно в систему.

Все мои контроллеры имеют $this->middleware('auth');который должен автоматически отправить вас обратно на экран входа.

У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/59903552/laravel-logout-hittin-gthe-back-button-send-s-me-back-into-the-app-how-do-i-pr#comment105946289_59903552
Вам нужно запретить кэш браузера (для страниц, которые должны быть скрыты) и/или удалить историю. Очистка истории может быть выполнена только с javascript, поэтому это будет означать отправку некоторого кода со страницей подтверждения выхода из системы
https://stackoverflow.com/questions/59903552/laravel-logout-hittin-gthe-back-button-send-s-me-back-into-the-app-how-do-i-pr#comment105954105_59903552
@Snapey можете ли вы дать правильный ответ с примером решения, чтобы я мог а отметить его как принятый и б понять, о чем вы говорите? Это звучит как правильный пример.
https://stackoverflow.com/questions/59903552/laravel-logout-hittin-gthe-back-button-send-s-me-back-into-the-app-how-do-i-pr#comment105959401_59903552
После некоторых экспериментов можно перенаправить пользователя на страницу "выход из системы" и на этой странице заменить последний элемент в истории на ту же страницу. Кажется невозможным удалить предыдущие записи в истории, поэтому, хотя пользователь не может нажать назад, он может удерживать кнопку назад и выбрать любую из предыдущих страниц.
https://stackoverflow.com/questions/59903552/laravel-logout-hittin-gthe-back-button-send-s-me-back-into-the-app-how-do-i-pr#comment105965658_59903552
@Snapey большинство наших клиентов не настолько технически подкованы, чтобы удерживать кнопку Назад для выбора страницы.

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

Mohamed-Foly

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/

https://stackoverflow.com/questions/59903552/laravel-logout-hittin-gthe-back-button-send-s-me-back-into-the-app-how-do-i-pr/59905832#comment105939329_59905832
Почему наличие $ this->middleware ('auth’) во всех контроллерах не делает этого автоматически?
https://stackoverflow.com/questions/59903552/laravel-logout-hittin-gthe-back-button-send-s-me-back-into-the-app-how-do-i-pr/59905832#comment105945930_59905832
оба способа хороши и приводят к одному и тому же результату, но отличаются, когда проверка происходит в жизненном цикле запроса. перед загрузкой контроллера (в маршруте), во время загрузки контроллера (в конструкторе). оба будут перенаправлены на вход, если пользователь попытался получить доступ к маршруту
https://stackoverflow.com/questions/59903552/laravel-logout-hittin-gthe-back-button-send-s-me-back-into-the-app-how-do-i-pr/59905832#comment105963236_59905832
К сожалению, это не мешает браузеру просто показывать содержимое из своего кэша, без ссылки на сервер.
https://stackoverflow.com/questions/59903552/laravel-logout-hittin-gthe-back-button-send-s-me-back-into-the-app-how-do-i-pr/59905832#comment105970189_59905832
Я думаю, что эта статья будет полезна twitteinfo.com/…
Snapey

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

Теперь, после просмотра защищенных страниц, выхода из системы и возврата обратно, предыдущие страницы не раскрываются.

Является ответом!
Snapey

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'));
    }
Закрыть X