2015-12-31 1 views
18

Comme vous le savez, Laravel 5.2 est sorti il ​​y a quelques jours. J'essaye cette nouvelle version. J'ai fait un nouveau projet en utilisant la commande suivante sur CLI:Laravel 5.2 Auth ne fonctionne pas

laravel new testapp 

Comme par documentation of Authentication Quickstart, je suivais la commande suivante pour voies d'échafaudage et des vues d'authentification:

php artisan make:auth 

Il a bien fonctionné. L'inscription fonctionne bien. Mais je suis confronté à un problème dans Login. Après connexion je l'ai testé suivant dans le fichier route.php:

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

Auth::user() est de retour null et aussi Auth::check() et Auth::guest() ne fonctionnent pas correctement. J'ai essayé la même chose encore et encore deux trois fois en faisant de nouveaux projets, mais je n'ai pas pu obtenir les bons résultats.

Ci-dessous la complète 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]'); 
}); 

Quelqu'un peut-il me aider? ou Est-ce que quelqu'un est confronté au même problème? Comment puis-je le réparer?

+0

vous utilisez le groupe middleware 'web' dans votre groupe d'itinéraire? S'il vous plaît poster toutes vos routes.php – Moppo

+0

@Moppo ajouté ci-dessus dans la question. –

Répondre

29

Laravel 5.2 introduit le concept middleware groups: vous pouvez spécifier un ou plusieurs middleware appartient à un groupe, et vous pouvez appliquer un groupe middleware à un ou plusieurs itinéraires

Par défaut Laravel 5.2 définit un groupe nommé web, utilisé pour le groupe de la session de manipulation middleware et d'autres utilitaires 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, 
], 

Ainsi, si vous voulez la gestion des sessions, vous devez utiliser ce groupe middleware pour toutes les routes dans lesquelles vous souhaitez utiliser l'authentification:

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

MISE A JOUR POUR Laravel VERSION> = 5.2.27

Au Laravel 5.2.27 version toutes les routes définies dans routes.php utilisent par défaut le groupe middleware web. Cela est réalisé en app/Providers/RouteServiceProvider.php:

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

Vous n'avez plus besoin d'ajouter manuellement le groupe middleware web à vos itinéraires.

Quoi qu'il en soit, si vous souhaitez utiliser l'authentification par défaut pour un itinéraire, vous devez toujours lier le middleware auth à la route

+3

Cela me semble beaucoup plus logique, après l'obstacle mental initial de «non, vous n'avez pas besoin du middleware' auth' pour que Auth fonctionne, vous avez besoin du middleware 'web'» ... – WannabeCoder