2016-02-13 20 views
6

To jest moja pierwsza próba pakietu laravel i wystąpił problem, w którym Auth :: attempt ($ credentials) działa w moim kontrolerze logowania, ale po przekierowaniu na chronioną trasę lub kontroler, użytkownik nie jest już uwierzytelniony. Poniżej znajduje się moja metoda kontrolera logowania z zakomentowanym przekierowaniem do pulpitu nawigacyjnego.Auth nie działa w pakiecie Laravel

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

Odpowiedź na prawidłowe poświadczenia wypisuje prawidłowy rekord użytkownika, a Auth :: check zwraca wartość true. Jednak po przekierowaniu do kontrolera administratora użytkownik nie jest uwierzytelniany. Poniżej znajduje się metoda kontrolera administratora, która powinna wyprowadzać uwierzytelnionego użytkownika, ale zwraca tylko "niezalogowany".

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

Oba kontrolery używać Auth ;, ich nazw są zgodne z sprzedawca/pakietu/pathToDir db jest ustawiony prawidłowo, a klucz szyfrowania został ustawiony. Jakieś pomysły na to, co dzieje się źle? Dzięki

Odpowiedz

14

Okazuje się, że problem był z nowej internetowej middleware, przeniósł wszystkie swoje trasy, które wymagają danych sesji w grupie trasy i wszystko działa normalnie.

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

Uratowałeś mój dzień! Okazuje się, że dla domyślnych tras w 'routes/web.php' Laravel stosuje całą grupę middleware o nazwie" web ". I nie stosuje tej grupy do zewnętrznych tras pakietów ładowanych za pomocą metody dostawcy usługi '$ this-> loadRoutesFrom (__ DIR __. '/ Routes.php');' –

0

Domyślnym zachowaniem metody jest nie logowanie użytkownika.

należy go zmienić na:

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

ten sposób można ustawić remember jako fałszywe i login jak prawdziwe.

zobacz więcej na ten temat tutaj: https://laravel.com/docs/5.2/authentication

Powiązane problemy