众所周知,Laravel 5.2是几天前发布的。我正在尝试这个新版本。我在CLI上使用以下命令创建了一个新项目:
laravel new testapp
根据Authentication Quickstart的文档,我遵循以下命令来搭建身份验证的路由和视图:
php artisan make:auth
工作正常。注册工作正常。但是我在登录时遇到问题。登录后,我在route.php文件中进行了以下测试:
Route::get('/', function () { dd( Auth::user()); return view('welcome'); });
Auth::user()是返回null,也Auth::check()和Auth::guest()没有适当工作。我通过制作新项目一次又一次尝试了两次,但是无法获得正确的结果。
Auth::user()
null
Auth::check()
Auth::guest()
下面是完整的 route.php
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'); });
谁能帮我?还是有人面临同样的问题?我该如何解决?
Laravel 5.2引入了 中间件组 概念:您可以指定一个或多个中间件属于一个组,并且可以将中间件组应用于一个或多个路由
默认情况下,Laravel 5.2定义了一个名为的组web,用于对中间件处理会话和其他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.27版本开始,routes.php默认情况下,其中定义的所有路由都使用web中间件组。在以下方面实现app/Providers/RouteServiceProvider.php:
5.2.27
routes.php
app/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中间件绑定到路由
auth