Laravel выход, нажатие кнопки назад отправляет меня обратно в приложение, как мне это предотвратить? - PullRequest
0 голосов
/ 24 января 2020

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

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

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

Ответы [ 3 ]

1 голос
/ 26 января 2020

После многих испытаний я обнаружил, что единственное решение состоит в том, чтобы принудительно устанавливать заголовок "не хранить" в ответе всех "защищенных" страниц, чтобы браузер не кэшировал его. В медленных сетях это может добавить небольшую задержку к загрузке страницы. Это влияет только на возвращенный ответ, ни один из ресурсов, загруженных страницей, не затрагивается. Их все еще можно кэшировать.

Создайте новое промежуточное ПО с 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 section

        'nocache' => \App\Http\Middleware\NoCacheHeaders::class,

middleware nocache теперь можно добавлять в группы или отдельные маршруты. Я добавляю ко всем защищенным маршрутам auth

//protected routes (must be logged in)
Route::middleware(['auth','nocache'])->group(function(){

    Route::get('/home', 'HomeController@index')->name('home');

    Route::name('admin.')->group(function () {
        Route::resource('admin/users','Admin\UserController');
        Route::resource('admin/roles','Admin\RoleController');
    });

});

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

0 голосов
/ 27 января 2020

Если вы просто хотите запретить использование кнопки «Назад» и не обращаете внимания на то, что пользователь может удерживать кнопку «Назад» и go на более ранних страницах, то следующее отключает кнопку «Назад».

(конечно, вы можете использовать как отключить кеш, так и отключить кнопку возврата)

Создать новое представление «Выйти»

Это необязательно, но означает, что вы можете добавить 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');

Измените контроллер входа на go для представления выхода из системы

Добавить следующий код где-то внутри App\Http\Controllers\Auth\LoginController.php

    private function loggedOut($request)
    {
        return redirect(route('logout'));
    }
0 голосов
/ 25 января 2020

Вы можете легко перенаправить все трафики c через промежуточное ПО аутентификации в классе маршрутизации, используя группу маршрутов:

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/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...