2016-02-13 4 views
6

Dies ist mein erster Versuch mit einem Laravel-Paket und habe ein Problem, bei dem Auth :: versuch ($ credentials) in meinem Login-Controller funktioniert, aber bei Umleitung zu einer geschützten Route oder Controller, Der Benutzer ist nicht mehr authentifiziert. Unten ist meine Login-Controller-Methode mit der Umleitung zum Dashboard auskommentiert.Benutzerauthentifizierung nicht im Laravel-Paket

public function attempt(Request $request){ 

    $email = strtolower(strip_tags(htmlspecialchars($request->input('email')))); 
    $password = strip_tags(htmlspecialchars($request->input('password'))); 

    if (Auth::attempt(array('email' => $email, 'password' => $password))) 
    { 
     // Redirect to dashboard route 
     //return redirect()->intended('/admin'); 
     if(Auth::check()) 
      print_r(Auth::user()); 
    } 
} 

Eine Antwort auf gültige Anmeldeinformationen druckt den richtigen Benutzerdatensatz aus, und Auth :: check gibt true zurück. Bei der Weiterleitung an den Administrator-Controller wird der Benutzer jedoch nicht authentifiziert. Unten ist die Admin-Controller-Methode, die den authentifizierten Benutzer ausgeben sollte, aber nur "nicht protokolliert" zurückgibt.

public function index() 
{ 
    if(Auth::check()) print_r(Auth::user()); 
    else echo "not logged"; 
} 

Beide Controller verwenden Auth ;, ihre Namensräume sind im Einklang mit Verkäufer/Paket/pathToDir, db ist korrekt eingerichtet und der Verschlüsselungsschlüssel gesetzt wurde. Irgendwelche Ideen, was schief läuft? Danke

Antwort

14

Stellt sich das Problem mit der neuen Web-Middleware war heraus, zog all meine Routen, die Session-Daten benötigen, um die Route Gruppe und alles funktioniert wie gewohnt.

Route::group(['middleware' => ['web']], function() { 

    Route::get("/login", ['uses'=>'[email protected]']); 
    Route::post("/login", ['uses'=>'[email protected]']); 
    Route::get("/logout", ['uses'=>'[email protected]']); 

    Route::group(['prefix' => 'admin', 'middleware' => 'auth'], function() { 
     Route::get('/', ['uses'=>'[email protected]']); 
    }); 
}); 
+1

Sie haben meinen Tag gerettet! Es stellt sich heraus, dass Laravel für Standardrouten innerhalb von "routes/web.php" die gesamte Middlewaregruppe namens "web" anwendet. Und wendet diese Gruppe nicht auf externe Paketrouten an, die über die Methode des Dienstanbieters '$ this-> loadRoutesFrom (__ DIR __. '/ Routes.php');' geladen wurden –

0

Das Standardverhalten des Methodenversuchs besteht darin, den Benutzer nicht protokolliert zu halten.

sollten Sie ändern es:

if (Auth::attempt(array('email' => $email, 'password' => $password), false, true)) 

Auf diese Weise können remember als falsch und login als wahr gesetzt wird.

prüft mehr darüber hier: https://laravel.com/docs/5.2/authentication