我刚接触Laravel 5,正在try 制作一个简单的身份验证页面.我的问题是,我可以在单击"注销"链接后正确注销,但如果我单击浏览器的"后退"按钮,仍然可以看到页面的内容,这些内容实际上不应该在我的身份验证中间件过程中看到.我读到我可以通过禁用缓存来防止这种情况,但我不认为这是最好的方法,所以我如何才能以更好的方式做到这一点?我的注销路由很简单

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
}

推荐答案

当用户点击"后退"按钮时,他们实际上已经登录了not次,这只是浏览器呈现了之前页面视图中的cached次内容.用户won't能够导航或与任何需要他们登录的东西交互,因为对于服务器上的应用程序来说,他们没有经过身份验证.

When the user clicks the back button you have no control over that as it doesn't make a request to the server.

使用后退按钮,他们将能够查看的唯一内容是他们在登录时已经访问过的内容.如果他们试图访问任何新内容,他们会向您的应用程序发出新的请求,您的中间件将触发并将他们重定向到登录页面.

I guess if you really wanted to stop this behavior you could use some JavaScript and such to send an ajax request and check if the user is logged in that way, but quite useless from a security point of view.

Laravel相关问答推荐

如何定制有关密码被泄露的Laravel Breeze S消息?

在Laravel Livewire中,如果一个输入基于另一个唯一的字段是唯一的,如何判断验证?

Laravel Eloquent查询与集合优化

如何在 Laravel 9 中获取带分页的订单列表?

如何计算具有特定 ID Laravel 的行

Laravel AppServiceProvider 中的代码在通过 DeployHQ 部署时停止 Composer 和构建

我的共享主机上的每个帖子请求都出现 503 服务不可用

使用 fetch api 时 Laravel 控制器不存在错误

在 Laravel 包中的路由上使用显式或隐式模型绑定

Laravel init 查询多种用途

使用命令行界面停止 laravel 服务器

Laravel 6 Passport 在错误的凭证上返回 400 Bad request

将 Laravel 升级到 4.2 后,Artisan::call('migrate') 不起作用

Laravel 将 JSON 转换为数组?

Laravel 将参数从路由传递到过滤器

调用未定义的方法 Illuminate\Foundation\Application::bindShared()

在 laravel 的自定义路径中创建模型

如何在 Laravel 中动态更改 .env 文件中的变量?

如何使 Laravel (Blade) 文本字段只读

如何在 Laravel 5.3 中获取当前的语言环境