Php 登录后Laravel路由不工作

Php 登录后Laravel路由不工作,php,laravel,Php,Laravel,我是拉威尔的新手,刚刚开始构建我的第一个应用程序。我使用的是Laravel 5.2.5。我正在跟踪laracast视频以实现身份验证。当我第一次启动应用程序时,我可以访问/auth/register、/auth/login和/auth/logout。注册和登录工作正常。Register在我的用户表中创建一个条目,/auth/login允许我使用该用户登录。成功登录后,我尝试注销。当我尝试访问/auth/logout时,我得到一个NotFoundHttpException。当我尝试访问/auth/

我是拉威尔的新手,刚刚开始构建我的第一个应用程序。我使用的是Laravel 5.2.5。我正在跟踪laracast视频以实现身份验证。当我第一次启动应用程序时,我可以访问/auth/register、/auth/login和/auth/logout。注册和登录工作正常。Register在我的用户表中创建一个条目,/auth/login允许我使用该用户登录。成功登录后,我尝试注销。当我尝试访问/auth/logout时,我得到一个NotFoundHttpException。当我尝试访问/auth/login和/auth/register时,我会遇到相同的异常。此时,我只能访问欢迎页面和测试页面。在欢迎页面上,我显示了当前登录的用户,我可以看到他仍在登录。我没有更改其余文件中的任何代码

以下是我的routes.php代码:

Route::group(['middleware' => ['web']], function () {
    Route::get('welcome', function () {
        return view('welcome');
    });
    Route::get('test','TestController@index');

    Route::get('auth/login', 'Auth\AuthController@getLogin');
    Route::post('auth/login', 'Auth\AuthController@postLogin');
    Route::get('auth/logout', 'Auth\AuthController@getLogout');

// Registration routes...
    Route::get('auth/register', 'Auth\AuthController@getRegister');
    Route::post('auth/register', 'Auth\AuthController@postRegister');
});
AuthenticationController:

<?php

namespace App\Http\Controllers\Auth;

use App\User;
use Validator;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ThrottlesLogins;
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers;

class AuthController extends Controller
{  

    use AuthenticatesAndRegistersUsers, ThrottlesLogins;

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

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

    /**
     * Get a validator for an incoming registration request.
     *
     * @param  array  $data
     * @return \Illuminate\Contracts\Validation\Validator
     */
    protected function validator(array $data)
    {
        return Validator::make($data, [
            'name' => 'required|max:255',
            'email' => 'required|email|max:255|unique:users',
            'password' => 'required|confirmed|min:6',
        ]);
    }

    /**
     * Create a new user instance after a valid registration.
     *
     * @param  array  $data
     * @return User
     */
    protected function create(array $data)
    {
        return User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => bcrypt($data['password']),
        ]);
    }
}

长话短说:这是因为您没有注册
'/'
路线

详细说明:当您尝试访问
/auth/login
/auth/register
时,我将首先回答您的
NotFoundHttpException

protected $redirectAfterLogout = '/some-other-route';
在您的
AuthController
中,您将看到以下代码行:

public function __construct()
{
    $this->middleware('guest', ['except' => 'logout']);
}
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
if (Auth::guard($guard)->check()) {
    return redirect('/');
}
这段代码基本上确保只有来宾(或未经身份验证的用户)可以访问,除非涉及注销方法

这个“来宾”中间件是什么?如果查看
app/Http/Kernel.php
,您将看到以下代码行:

public function __construct()
{
    $this->middleware('guest', ['except' => 'logout']);
}
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
if (Auth::guard($guard)->check()) {
    return redirect('/');
}
“guest”基本上是
RedirectIfAuthenticated
类的别名。在该类中,您将看到以下代码行:

public function __construct()
{
    $this->middleware('guest', ['except' => 'logout']);
}
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
if (Auth::guard($guard)->check()) {
    return redirect('/');
}
您可以看到,如果用户已经通过身份验证,他们将被重定向到
'/'
页面。由于您没有注册该路由,因此会得到
NotFoundHttpException
。您可以在routes文件中注册该路由,也可以在
RedirectIfAuthenticated
类中更改路由

接下来,当您出于同样的原因尝试注销时,您会遇到同样的异常。当您尝试注销时,它将触发以下代码:

public function logout()
{
    Auth::logout();

    return redirect(property_exists($this, 'redirectAfterLogout') ? $this->redirectAfterLogout : '/');
}
换句话说,您将被重定向到您尚未注册的
'/'
页面。如果要重定向到另一页而不是
“/”
页,请将此行代码添加到
AuthController

protected $redirectAfterLogout = '/some-other-route';

您的中间件“web”做什么?例外情况意味着,您没有该请求的路由,可能您使用POST发送并检查GET?@derdida这是标准的Laravel 5.2 group Middleware。我将直接在浏览器中写入URL,因此我非常确定它是GET。啊,thx Marcin,我仍然使用5.1 LTS;)当您访问这些页面时,是否会被重定向到
“/”
?很抱歉回复太晚,非常感谢您的回复。但是,当我尝试注销时,函数Auth::logout()从未被调用,因为此时无法访问路由。我通过从另一条路线呼叫注销解决了我的问题。