Laravel 5 Auth注销无法正常工作

mik*_*yuk 17 php laravel

当我使用内置身份验证并尝试将用户注销时/auth/logout- 它无法正常工作.它似乎让用户保持登录状态.但是当我清除浏览器缓存时,我可以看到实际上已经将用户注销了.

我没有在页面上得到任何错误,也没有在日志文件中出错.

我猜测Session::flush()在注销方法可能会解决这个问题 - 但我不知道该把它放在哪里..有人能指出我正确的方向吗?

lor*_*rey 52

对于那些使用已接受的解决方案解决问题的人:我从Laravel 5.1开始并更新到5.2.以下修复对我有用:

尝试将"退出"路线更改为

Route::get('auth/logout', 'Auth\AuthController@logout');
Run Code Online (Sandbox Code Playgroud)

或者在AuthController构造函数中添加

public function __construct()
{
    $this->middleware('guest', ['except' => ['logout', 'getLogout']]);
}
Run Code Online (Sandbox Code Playgroud)

取自:https://stackoverflow.com/a/34667356/1275778(如果您之后仍然遇到问题,还请检查其他答案)

  • 这应该是公认的答案.更改默认的`$ this-> middleware('guest',['except'=> ['getLogout']]);`到`$ this-> middleware('guest',['except'=> ['logout ','getLogout']]);`做了诀窍. (6认同)
  • 谢谢,您的第二个选项在许多其他失败的解决方案后立即工 (5认同)

Dee*_*ran 11

试试这个..

放入以下代码" 类AuthController extends Controller "

public function getLogout()
    {
        $this->auth->logout();
        Session::flush();
        return redirect('/');
    }
Run Code Online (Sandbox Code Playgroud)

  • 我需要改变 Session::flush(); 到 \Session::flush(); 但在其他方面对我的情况有用。 (2认同)

小智 7

我有同样的问题.问题实际上是路由和控制器配置中的一个简单的小错误.

您看到路由实际上指定了一个方法,getLogout并且控制器异常正在寻找logout.

您唯一需要做的就是更改控制器中的异常.无需任何其他方法.该getLogout方法已经存在且运行良好.

这是实际的代码

应用程序/ HTTP/routes.php文件

Route::get('auth/logout', 'Auth\AuthController@getLogout');
Run Code Online (Sandbox Code Playgroud)

应用程序/ HTTP /控制器/认证/ AuthController.php

public function __construct()
{
    $this->middleware($this->guestMiddleware(), ['except' => 'logout']);
}
Run Code Online (Sandbox Code Playgroud)

_construct方法应如下所示:

public function __construct()
{
    $this->middleware($this->guestMiddleware(), ['except' => 'getLogout']);
}
Run Code Online (Sandbox Code Playgroud)