Laravel 5.2 身份验证不起作用

Posted

技术标签:

【中文标题】Laravel 5.2 身份验证不起作用【英文标题】:Laravel 5.2 Auth not Working 【发布时间】:2016-04-05 12:31:59 【问题描述】:

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

laravel new testapp

根据documentation of Authentication Quickstart,我按照以下命令搭建路由和身份验证视图:

php artisan make:auth

效果很好。注册工作正常。但我在登录时遇到问题。登录后,我在 route.php 文件中测试了以下内容:

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

Auth::user() 正在返回 null 并且 Auth::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');
);

谁能帮助我?或者有人面临同样的问题吗?我该如何解决?

【问题讨论】:

您在路由组中使用中间件组web 吗?请发布您所有的 routes.php @Moppo 在上面的问题中添加。 【参考方案1】:

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

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

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 中实现的:

protected function mapWebRoutes(Router $router)

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

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

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

【讨论】:

这对我来说更有意义,在“不,你不需要 auth 中间件来使 Auth 工作,你需要 web 中间件”的最初心理障碍之后。 .

以上是关于Laravel 5.2 身份验证不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 4 身份验证不起作用

Laravel 子域:所有子域的单一身份验证不起作用?

Laravel 多重身份验证保护路由多个中间件不起作用

Laravel 5.6 护照 API 身份验证在获取请求中不起作用

Laravel Sanctum Token API 身份验证在 Postman 中不起作用

laravel 5.4 使用 ajax 登录。身份验证成功,但 redirectTo 属性不起作用并保持重定向到“/home”