2013-04-24 24 views
9

Ich habe eine Laravel 4 App, in der ich einen Benutzer eingerichtet habe. In meiner Login-Route rufe ich Auth::attempt mit der E-Mail und dem Passwort an, aber es kommt immer als falsch zurück. Ich habe definitiv das richtige Passwort und den richtigen Hash in der Datenbank als Hash::check gibt True zurück.Laravel 4 Authentifizierung funktioniert nicht

Ich denke, es kann aufgrund der Verwendung von email als Login-Feld anstelle von username, aber ich kann keine Einstellung dafür sehen. This question impliziert, Sie könnten eine Option zu config/auth.php hinzufügen, aber es hat nicht funktioniert. This question sagt, username als Array-Schlüssel verwenden, aber dann bekomme ich SQL-Fehler, weil es versucht, auf ein Feld Benutzername in der Datenbank auswählen.

Muss ich dem Benutzermodell etwas hinzufügen, um das Feld Benutzername anzugeben? Hier ist meine Login-Route:

Route::post('login', function() { 

    // data from login form 
    $credentials = array(
     'email' => Input::get('email'), 
     'password' => Input::get('password') 
    ); 

    $auth = Hash::check(Input::get('password'), Hash::make('mypass')); 
    var_dump($auth); // this is TRUE 

    // login was good 
    $auth = Auth::attempt($credentials); 
    var_dump($auth); // this is FALSE 
}); 
+2

Der Array-Schlüssel sollte mit einer Spalte übereinstimmen, mit der Sie Benutzer in der Datenbank authentifizieren. Dies wird in [docs] (http://four.laravel.com/docs/security#authenticating-users) erwähnt. Haben Sie das Standard-Benutzermodell, mit dem L4 ausgeliefert wird, geändert? –

Antwort

11

ich das Problem gefunden. Wie von Jason im obigen Kommentar vorgeschlagen, hatte ich die Datei models/User.php geändert und einige Funktionen entfernt, von denen ich nicht wusste, dass sie notwendig waren.

Die Methoden und getAuthPassword() müssen im Benutzermodell zur Authentifizierung enthalten sein!

+3

Das tun sie. Das Modell muss auch das "UserInterface" und das "RemindableInterface" implementieren. –

6

In app/config/app.php stellen Sie sicher, dass Sie den "Schlüssel" gesetzt haben. Das hat mich dazu gebracht, mir die Haare auszuziehen. Es wird alles funktionieren, das Passwort scheint in der DB gehashed zu sein, aber es wird immer false zurückgeben, bis Sie diesen Schlüssel setzen und Ihr Passwort in der DB erneut hashen.

"php Handwerkers Schlüssel: erzeugen"

+0

Vielen Dank, Mann. Ich benutze den Laravel 4 Generator von Jeffery Way und habe diesen kritischen Punkt in der Laravel-Installation total vergessen, bevor ich angefangen habe, meine Routen und Controller zu programmieren. –

1

Hatte das gleiche Problem und ließ mich stundenlang schwitzen. Überprüfen Sie definitiv Ihre User.php Modell und stellen Sie sicher, dass Sie nicht die Standardversion überschrieben haben. Danke Jason!