Laravel 5.2 Аутентификация не работает

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

laravel new testapp

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

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');
});

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


person Hassan Saqib    schedule 31.12.2015    source источник
comment
Вы используете группу промежуточного программного обеспечения web в своей группе маршрутов? Пожалуйста, опубликуйте все свои маршруты.php   -  person Moppo    schedule 31.12.2015
comment
@Moppo добавил выше в вопросе.   -  person Hassan Saqib    schedule 31.12.2015


Ответы (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 к маршруту.

person Moppo    schedule 31.12.2015
comment
Это имеет для меня гораздо больше смысла, после первоначального умственного препятствия, вам не нужно промежуточное программное обеспечение auth для работы Auth, вам нужно промежуточное программное обеспечение web... - person WannabeCoder; 02.02.2016