2015-12-27 165 views
12

我在Laravel 5.2中构建了一个非常简单的应用程序,但是当使用AuthController的操作注销时,它根本就不起作用。我有一个导航栏,用于检查Auth::check(),并且在调用注销操作后它不会更改。Laravel 5.2:Auth :: logout()不起作用

我有routes.php文件文件中这条路线:

Route::get('users/logout', 'Auth\[email protected]');

和它的

Route::group(['middleware' => ['web']], function()语句之外。

我也尝试在AuthController.php文件的末尾添加后续操作。

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

您有什么想法吗?

编辑1

如果我清楚谷歌的Chrome缓存,它的工作原理。

+0

这是什么意思“不起作用”?你能详细解释一下你运行什么动作,哪些不起作用? –

+0

你好@MarcinNabiałek。我编辑了这个问题。我希望能更好地解释。 –

+0

您的注销路线不应该在“网络”中间件组之外。它应该在里面。 –

回答

6

使用下面的代码

Auth::logout(); 

auth()->logout(); 
36

我也Laravel 5.2有类似的问题。您应该将路线更改为

Route::get('auth/logout', 'Auth\[email protected]'); 

或AuthController构造函数添加

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

为我工作。

+0

谢谢。我会在稍后检查,如果它有效,我会接受它作为答案。 –

+0

@Aztecnologic这个固定*我*的问题。不知道为什么我们必须在Laravel 5.2中编写自定义注销方法 - 我不必在5.1中。好吧。 – tenub

+0

谢谢。也解决了我的问题。任何解释为什么?似乎与在使用旧的laravel/laravel样板库时从5.1更新到5.2有关。 – lorey

1

这应该是你的构造函数的AuthController

$this->middleware('web'); 
$this->middleware('guest', ['except' => 'logout']); 
2

内容在else语句Http->Middleware->Authenticate.php变化login/

return redirect()->guest('/'); 

和routes.php文件

Route::get('/', function() { 
    return view('login'); 
}); 
定义以下航线

用于注销呼叫以下功能:

public function getlogout(){ 
    \Auth::logout(); 
    return redirect('/home'); 
} 

重要:重定向到/home,而不是/首先调用$this->middleware('auth');,然后在中间件重定向到/

4

的问题是从AuthController构造的“客人”中间件。应该从$this->middleware('guest', ['except' => 'logout']);改为$this->middleware('guest', ['except' => 'getLogout']);

如果检查内核文件,你可以看到你的客人中间件点\App\Http\Middleware\RedirectIfAuthenticated::class

该中间件检查用户是否通过认证,并将用户重定向到根页面,如果通过身份验证但让用户在未通过身份验证的情况下执行操作。通过使用$this->middleware('guest', ['except' => 'getLogout']);,当调用getLogout函数时,中间件不会被应用,从而使得经过认证的用户可以使用它。

N/B:与原始答案一样,您可以将getLogout更改为logout,因为getLogout方法只是返回laravel实现中的注销方法。

0

在routes.php文件中添加此行Route :: get('auth/logout','Auth \ AuthController @ getLogout'); 并在您的视图 A HREF添加此=“{{URL(‘/认证/注销’)}}”>注销 它工作正常,我

0

只需添加下面的路线,不添加任何这路中组(中间件):

Route::get('your-route', 'Auth\[email protected]'); 

现在注销应该工作,因为它应该以L 5.2没有AuthController进行任何修改。

0
/** 
* Log the user out of the application. 
* 
* @param \Illuminate\Http\Request $request 
* @return \Illuminate\Http\Response 
*/ 
public function logout(Request $request) 
{ 
    $this->guard()->logout(); 

    $request->session()->flush(); 

    $request->session()->regenerate(); 

    return redirect('/'); 
} 

/** 
* Get the guard to be used during authentication. 
* 
* @return \Illuminate\Contracts\Auth\StatefulGuard 
*/ 
protected function guard() 
{ 
    return Auth::guard(); 
}