web-dev-qa-db-fra.com

Laravel 5.2 L'authentification ne fonctionne pas

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

laravel new testapp

Selon documentation de démarrage rapide de l'authentification , j'ai suivi la commande suivante pour échafauder les routes et les vues d'authentification:

php artisan make:auth

Cela a bien fonctionné. L'inscription fonctionne bien. Mais je suis confronté à un problème de connexion. Après la connexion, j'ai testé les éléments suivants dans le fichier route.php:

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

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

Ci-dessous est le route.php Complet

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

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

18
Hassan Saqib

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

Par défaut Laravel 5.2 définit un groupe nommé web, utilisé pour regrouper la session de gestion du 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,
],

Donc, si vous souhaitez gérer la session, vous devez utiliser ce groupe de 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 À JOUR POUR LARAVEL VERSION> = 5.2.27

Au Laravel 5.2.27 version, toutes les routes définies dans routes.php utilise par défaut le groupe de 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 donc 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 une route, vous devez toujours lier le middleware auth à la route

29
Moppo