我正在使用Laravel 5.3并尝试实现身份验证系统 . 我用 php artisan
命令 make:auth
来设置它 . 我根据我的布局编辑了视图,并将其重定向到我的仪表板页面而不是主页(在设置中设置为默认值) . 现在,当我尝试注销时,它会把这个错误抛给我
NotFoundHttpException in RouteCollection.php line 161
我在routes / web.php中的代码是:
Auth::routes();
Route::get('/pages/superadmin/dashboard', 'HomeController@index');
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');
}
}
Auth/Login 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
我想将其重定向到auth /文件夹中的登录页面 .
6 回答
我终于在LoginController.php中添加了这一行来解决这个问题
并编辑此文件\ vendor \ laravel \ framework \ src \ Illuminate \ Foundation \ Auth \ AuthenticatesUsers.php如果您未在此文件中提供$ redirectAfterLogout,它将使用默认的'/' . 你也可以在github上找到它 . 链接就在答案的最后 .
你也可以在这里查看:https://github.com/laravel/framework/commit/aa1204448a0d89e2846cbc383ce487df6efd9fc8#diff-b72935cc9bfd1d3e8139fd163ae00bf5
希望它可以帮助某人 .
谢谢
如果您想继续使用GET注销
要么
在Laravel 5.4中测试过
我认为最好的解决方案是覆盖从 app/Http/Controllers/Auth/LoginController.php 文件内部调用的继承的"logout"方法 . 通过向此类添加以下方法来执行此操作:
由于"LoginController"类继承自 Illuminate\Foundation\Auth\AuthenticatesUsers ,您应该能够安全地覆盖此方法(在LoginController中)而不编辑实际的供应商文件本身...如果您编辑 AuthenticatesUsers 文件或任何供应商文件将导致严重的问题曾想升级......
这里唯一的额外步骤是您需要在 LoginController 类的顶部包含以下行:
在Laravel 5.3中
logout
是http post
而不是http get
. 您可以通过发布请求注销,例如Taylor Otwell do auth scaffolding .将注销操作重定向到登录页面意味着除非用户通过身份验证,否则站点中没有页面可用 .
我不是上面提到的触及 vendor 目录的忠实粉丝 . 确实如此,Laravel 5.4
vendor/laravel/framework/src/Illuminate/Foundation/Auth/AutenticateUser->logout()
重定向到'/'
. 没有可用于更改它的参数 . 所以让's keep it that way and just add an ' auth保护' to the route ' /'(家)在
/routes/web.php
添加Route::get('/', function () { return view('home'); })->middleware('auth');
这不是最简单的方法吗?
适用于laravel 5.6
File => app/Http/Controllers/Auth/LoginController.php
谢谢The Virtual Machinist为您的answer .