Laravel Auth::logout() 失败

Posted

技术标签:

【中文标题】Laravel Auth::logout() 失败【英文标题】:Laravel Auth::logout() Fail 【发布时间】:2014-10-03 13:35:19 【问题描述】:

我只是在 Laravel 4 中创建一个基本应用程序,但我遇到了一个小问题。

我的注销功能无法正常工作……它工作正常,但是

当用户登录并单击注销按钮时,我将注销用户,但是当我单击浏览器的后退按钮时,我会返回登录页面。

我正在使用Auth::logout()。 这个方法是终止会话还是对浏览器缓存有任何作用?

我该如何解决这个问题?

我的注销功能:

public function getLogout()

    if(Auth::check())

        Auth::logout();
        return Redirect::route('home');

    

我的路线:

/*
 * Authenticated users
 */

Route::group(array('before' => 'auth'), function() 

    Route::get('success', array(

        'as' => 'success',
        'uses' => 'AccountController@getSuccess'

    ));


    Route::get('signout', array(
        'as' => 'signout',
        'uses' => 'AccountController@getLogout'
    ));

  );

【问题讨论】:

【参考方案1】:

这是浏览器缓存问题。

试试...

App::after(function($request, $response)
    
  $response->headers->set('Cache-Control','nocache, no-store, max-age=0, must-revalidate');
  $response->headers->set('Pragma','no-cache');
  $response->headers->set('Expires','Fri, 01 Jan 1990 00:00:00 GMT');
);

【讨论】:

【参考方案2】:

@Spoofy,这是浏览器缓存的问题, 阅读this 链接以解决此问题

【讨论】:

【参考方案3】:

这是正常行为。浏览器“记住”加载的页面,并且在您点击返回按钮时不会完全重新加载它们,因此即使您已正确注销,您仍然会看到仅验证页面。但是现在对您应用的受限页面发出的任何请求都应该失败,因为即使浏览器向您显示在您登录时呈现的代码,它也无法在没有您干预的情况下进行身份验证。这很容易验证:

    登录 注销 点击返回按钮 刷新页面

现在应该提示您登录,而不是查看上一页。

【讨论】:

tbuteler 没错!用户正在注销并且可以返回,但是当他尝试执行诸如添加联系人之类的操作时,他会被重定向到登录表单:)。谢谢! 如何设置,注销后,页面刷新?为了节省时间,这个流程?【参考方案4】:

如果用户已经通过身份验证,您可以将用户从登录页面重定向,只需使用 if-else 语句进行检查!

【讨论】:

那不行,因为浏览器在后退按钮上仍然保持前一个浏览器的“状态” 不是真的!除非你在谈论 Opera Web Browser。 Chrome、Mozilla 刷新以前的页面,这就是您应该检查用户是否经过身份验证的地方。 所以 Richie 应该检查我的成功页面中的 auth::check() 是否到? 我听不懂你在说什么英语 @Richie:见上面 tbuteler 的回答,这就是我要说的。

以上是关于Laravel Auth::logout() 失败的主要内容,如果未能解决你的问题,请参考以下文章

laravel5.2之logout注销账号无效

按下后退按钮时 Laravel 注销失败

Laravel 5 - 在视图中使用 Auth::check()

GET Route Laravel 中的 URL 参数

为啥我登录后刷新页面时 Laravel 会注销?

Laravel:从应用程序中注销/清除所有用户的所有会话