2016-10-18 53 views
3

我正在使用Laravel 5.3并试图实现身份验证系统。我用php artisan命令make:auth来设置它。我根据自己的布局编辑了视图,并将其重定向到我的仪表板页面而不是主页(在设置中默认设置)。现在,当我试图注销它扔我这个错误如何使用Laravel 5.3注销并重定向到登录页面?

NotFoundHttpException in RouteCollection.php line 161 

我在航线代码/ web.php是:

Auth::routes(); 

Route::get('/pages/superadmin/dashboard', '[email protected]'); 

HomeController.php

<?php 

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 

class HomeController extends Controller 
{ 
/** 
* Create a new controller instance. 
* 
* @return void 
*/ 
public function __construct() 
{ 
    $this->middleware('auth'); 
} 

/** 
* Show the application dashboard. 
* 
* @return \Illuminate\Http\Response 
*/ 
public function index() 
{ 
    return view('dashboard'); 
} 
} 

验证/登录Controller.php

<?php 

namespace App\Http\Controllers\Auth; 

use App\Http\Controllers\Controller; 
use Illuminate\Foundation\Auth\AuthenticatesUsers; 

class LoginController extends Controller 
{ 
/* 
|-------------------------------------------------------------------------- 
| Login Controller 
|-------------------------------------------------------------------------- 
| 
| This controller handles authenticating users for the application and 
| redirecting them to your home screen. The controller uses a trait 
| to conveniently provide its functionality to your applications. 
| 
*/ 

use AuthenticatesUsers; 

/** 
* Where to redirect users after login. 
* 
* @var string 
*/ 
protected $redirectTo = '/dashboard'; 

/** 
* Create a new controller instance. 
* 
* @return void 
*/ 
public function __construct() 
{ 
    $this->middleware('guest', ['except' => 'logout']); 
} 
} 

我试过此页面上的解决方案:How to set laravel 5.3 logout redirect path?,但它没有工作,显示这些错误:

ReflectionException in Route.php line 339: 
Class App\Http\Controllers\Auth\Request does not exist 

我想它重定向到登录这是认证/文件夹页。

回答

0

在Laravel 5.3 logouthttp post而不是http get。您可以通过邮政请求注销,例如Taylor Otwell在auth scaffolding中做的。

<a href="{{ url('/logout') }}" 
    onclick="event.preventDefault(); 
      document.getElementById('logout-form').submit();"> 
    Logout 
</a> 

<form id="logout-form" action="{{ url('/logout') }}" method="POST" style="display: none;"> 
    {{ csrf_field() }} 
</form> 
2

我终于在我的LoginController.php

protected $redirectAfterLogout = 'auth/login'; 

加入这一行,并编辑该文件\供应商\ laravel \框架的\ src \照亮\基金会\身份验证\ AuthenticatesUsers.php解决了这个问题 如果您不在此文件中提供$ redirectAfterLogout,它将使用默认的“/”。你也可以在github上找到它。链接在答案的最后。

public function logout() 
{ 
    return redirect(property_exists($this, 'redirectAfterLogout') ? $this- >redirectAfterLogout : '/'); 
} 

您也可以点击此处查看:https://github.com/laravel/framework/commit/aa1204448a0d89e2846cbc383ce487df6efd9fc8#diff-b72935cc9bfd1d3e8139fd163ae00bf5

希望它可以帮助别人。

谢谢

+1

谢谢,它为我工作! – Vinny

+0

一个问题是,如果您使用git,供应商文件夹不受版本控制,那么您可以将注销功能的内容复制到您的LoginController,然后在注销时它将会去那里而不是供应商包中的文件夹 –

+0

我强烈建议不要编辑供应商文件。我会在下面发布我的解决方案。 –

0

重定向注销操作到登录页面对我意味着没有页面在除非用户通过验证,否则网站可用。

我不是很喜欢触摸供应商目录,因为它是上面建议的。确实,Laravel 5.4 vendor/laravel/framework/src/Illuminate/Foundation/Auth/AutenticateUser->logout()重定向到'/'。没有可用的参数来改变它。因此,让我们继续保持这种方式,只是增加一个“身份验证保护”的路线“/”(家)

/routes/web.php

添加 Route::get('/', function() { return view('home'); })->middleware('auth');

是不是最简单的方法是什么?

2

测试在Laravel 5.4

,我相信工作的最好是压倒一切的,但未通过应用程序中调用继承的“注销”的方法解决方案/ HTTP /控制器/认证/ LoginController.php文件。通过添加下面的方法到这个类做到这一点:

/** 
* 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('/login'); 
} 

正如“的LoginController”类从照亮\基金会\身份验证\ AuthenticatesUsers继承,你应该放心地能够重写此方法(在LoginController中)不编辑实际的供应商档案本身...编辑AuthenticatesUsers文件,或者任何供应商档案会造成重大头痛下来,如果你曾经想升级之路......

这里唯一的额外步骤是,您需要在顶部包含以下行登录控制器类别:

use Illuminate\Http\Request; 
相关问题