2015-12-31 4 views
18

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

laravel new testapp 

По documentation of Authentication Quickstart, я последовал за следующую команду для каркасных маршрутов и видов аутентификации:

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'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', '[email protected]'); 
}); 

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

+0

вы с помощью промежуточного программного обеспечения группы 'web' в вашей группе маршрутов? Пожалуйста, напишите все ваши маршруты.php – Moppo

+0

@Moppo добавил в вопрос. –

ответ

29

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 промежуточное программное обеспечение на маршрут

+3

Это имеет для меня гораздо больше смысла, после первоначального умственного препятствия: «Нет, вам не нужно« промежуточное программное обеспечение auth », чтобы заставить Auth работать, вам нужно« промежуточное программное обеспечение »... – WannabeCoder

Смежные вопросы