Подтвердить что ты не робот

Laravel 5.2 Не работает

Как вы, ребята, знаете, что Laravel 5.2 был выпущен несколько дней назад. Я пробую эту новую версию. Я сделал новый проект, используя следующую команду в CLI:

laravel new testapp

Согласно документации по ускоренному запуску аутентификации, я выполнил следующую команду для маршрутизации эскизов и представлений аутентификации:

php artisan make:auth

Все прошло отлично. Регистрация работает нормально. Но я столкнулся с проблемой в Login. После входа в систему я протестировал следующее в файле 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 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', '[email protected]');
});

Может ли кто-нибудь мне помочь? или Кто-нибудь сталкивается с той же проблемой? Как я могу это исправить?

4b9b3361

Ответ 1

В Laravel 5.2 представлена ​​концепция групп промежуточного программного обеспечения: вы можете указать, что одно или несколько промежуточных программ принадлежат группе, и вы можете применить промежуточного слоя в один или несколько маршрутов.

По умолчанию 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 к маршруту