2015-12-31 22 views
18

Come sapete, Laravel 5.2 è stato rilasciato pochi giorni fa. Sto provando questa nuova versione. Ho fatto un nuovo progetto utilizzando il seguente comando sulla CLI:Laravel 5.2 Auth not Working

laravel new testapp 

Come da documentation of Authentication Quickstart, ho seguito il seguente comando per percorsi ponteggio e punti di vista di autenticazione:

php artisan make:auth 

Ha funzionato bene. La registrazione funziona bene. Ma sto affrontando un problema in Login. Dopo il login Ho provato seguente nel file di route.php:

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

Auth::user() sta tornando null e anche Auth::check() e Auth::guest() non funzionano in modo appropriato. Ho provato la stessa cosa ancora e ancora due volte creando nuovi progetti ma non ottenendo i risultati corretti.

riportano di seguito le completa 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]'); 
}); 

Qualcuno mi può aiutare? o qualcuno affronta lo stesso problema? Come posso ripararlo?

+0

stai usando il gruppo 'web' middleware nel tuo gruppo percorso? Per favore pubblica tutti i tuoi percorsi.php – Moppo

+0

@Moppo aggiunto sopra nella domanda. –

risposta

29

laravel 5.2 introduce il concetto middleware groups: è possibile specificare che uno o più middleware appartiene ad un gruppo, ed è possibile applicare un gruppo di middleware per una o più rotte

Per impostazione predefinita laravel 5.2 definisce un gruppo denominato web, utilizzato per raggruppare la gestione sessione e altre utilità http middleware:

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, 
], 

Quindi, se si vuole gestione delle sessioni, è necessario utilizzare questo gruppo middleware per tutte le rotte in cui si desidera utilizzare l'autenticazione:

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

AGGIORNAMENTO PER laravel VERSION> = 5.2.27

Come di laravel 5.2.27 versione, tutti i percorsi definiti nella routes.php utilizza per default del gruppo web middleware. Ciò si ottiene in app/Providers/RouteServiceProvider.php:

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

Quindi non occorre più aggiungere manualmente il gruppo web middleware ai tuoi percorsi.

In ogni caso, se si desidera utilizzare l'autenticazione di default per un percorso, è ancora necessario associare il auth middleware per il percorso

+3

Questo ha molto più senso per me, dopo l'ostacolo mentale iniziale di "no non hai bisogno del middleware' auth' per far funzionare Auth, hai bisogno del middleware 'web'" ... – WannabeCoder