Laravel 5.2 身份验证不起作用

如你们所知,Laravel 5.2几天前发布。我正在尝试这个新版本。我在CLI上使用以下命令制作了一个新项目:

laravel new testapp

根据身份验证快速入门的文档,我按照以下命令对身份验证的基架路由和视图进行了操作:

php artisan make:auth

它工作正常。注册工作正常。但我在登录中遇到了问题。登录后,我在路由.php文件中测试了以下内容:

   Route::get('/', function () {
    dd( Auth::user());
    return view('welcome');
});

Auth::user()正在返回,并且无法正常工作。我通过制作新项目一次又一次地尝试了同样的事情,但无法获得正确的结果。nullAuth::check()Auth::guest()

以下是完整的route.php

    <?php

/*
|--------------------------------------------------------------------------
| Routes File
|--------------------------------------------------------------------------
|
| Here is where you will register all of the routes in an application.
| It's a breeze. Simply tell Laravel the URIs it should respond to
| and give it the controller to call when that URI is requested.
|
*/

Route::get('/', function () {
    dd( Auth::());
    return view('welcome');
});

/*
|--------------------------------------------------------------------------
| Application Routes
|--------------------------------------------------------------------------
|
| This route group applies the "web" middleware group to every route
| it contains. The "web" middleware group is defined in your HTTP
| kernel and includes session state, CSRF protection, and more.
|
*/

Route::group(['middleware' => ['web']], function () {
    //
});

Route::group(['middleware' => 'web'], function () {
    Route::auth();

    Route::get('/home', 'HomeController@index');
});

任何人都可以帮我吗?或者是否有人面临同样的问题?我该如何修复它?


答案 1

Laravel 5.2 引入了中间件组概念:您可以指定一个或多个中间件属于一个组,并且可以将中间件组应用于一个或多个路由

默认情况下,Laravel 5.2 定义了一个名为 的组,用于对中间件处理会话和其他 http 实用程序进行分组:web

protected $middlewareGroups = [
'web' => [
    \App\Http\Middleware\EncryptCookies::class,
    \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
    \Illuminate\Session\Middleware\StartSession::class,
    \Illuminate\View\Middleware\ShareErrorsFromSession::class,
    \App\Http\Middleware\VerifyCsrfToken::class,
],

因此,如果需要会话处理,则应将此中间件组用于要在其中使用身份验证的所有路由:

Route::group( [ 'middleware' => ['web'] ], function () 
{
    //this route will use the middleware of the 'web' group, so session and auth will work here         
    Route::get('/', function () {
        dd( Auth::user() );
    });       
});

LARAVEL 版本更新 >= 5.2.27

从Laravel版本开始,默认情况下,中定义的所有路由都使用中间件组。这是在以下方面实现的:5.2.27routes.phpwebapp/Providers/RouteServiceProvider.php

protected function mapWebRoutes(Router $router)
{
    $router->group([
        'namespace' => $this->namespace, 'middleware' => 'web'
    ], function ($router) {
        require app_path('Http/routes.php');
    });
}

因此,您不再需要手动将中间件组添加到路由中。web

无论如何,如果要对路由使用默认身份验证,仍需要将中间件绑定到路由auth


答案 2

推荐