2013-06-14 14 views
8

Ich versuche, den Auth Klasse Laravel aber jedes Mal wenn ich versuche, in einem Benutzer anmelden, gibt die Methode false. Hier ist mein Code:Laravel 4 Auth :: Versuch() gibt immer false

routes.php

Route::get('new-user', function() { 
    return View::make('register'); 
}); 

Route::post('new-user', function() { 
    $name = Input::get('name'); 
    $email = Input::get('email'); 
    $password = Hash::make(Input::get('password')); 

    $user = new User; 
    $user->name = $name; 
    $user->email = $email; 
    $user->password = $password; 

    $user->save(); 
});  

Route::get('login', function() { 
     return View::make('login'); 
    }); 

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

     $user = array(
      'email' => Input::get('email'), 
      'password' => Hash::make(Input::get('password')) 
     ); 

     if (Auth::attempt($user)) { 
      //return Redirect::intended('dashboard'); 
      return "ok."; 
     } else { 
      return "Wrong."; 
     } 

    }); 

views/login.blade.php

{{ Form::open(array('url' => 'login', 'method' => 'post')) }} 

    <h1>Login:</h1> 

    <p> 
     {{ Form::label('email', 'Email: ') }} 
     {{ Form::text('email') }}<br /> 

     {{ Form::label('password', 'Password: ') }} 
     {{ Form::password('password') }}<br /> 
    </p> 

    <p> 
     {{ Form::submit('Login') }} 
    </p> 

{{ Form::close() }} 

config/Auth.php

return array(

    'driver' => 'eloquent', 
    'model' => 'User', 
    'table' => 'users', 
    'reminder' => array(
     'email' => 'emails.auth.reminder', 'table' => 'password_reminders', 
    ), 

); 

Die Datenbank der E-Mail hat & Passwort-Felder, und das Passwort-Feld ist varchar (60). Immer wenn ich die Login-Daten an/login sende, bekomme ich "Falsch". Ich kann wirklich nicht sehen, was hier falsch ist?

Antwort

3

Sie das Passwort, bevor Versuch nicht hash:

$user = array(
     'email' => Input::get('email'), 
     'password' => Input::get('password') 
    ); 

    if (Auth::attempt($user)) { 
     //return Redirect::intended('dashboard'); 
     return "ok."; 
    } else { 
     return "Wrong."; 
    } 
+0

Es ist immer noch gibt mir falsch („Falsch“.) – John

+1

Gemäß der Dokumentation (http://four.laravel.com/docs/security#storing-passwords) Passwörter ungehashte übergeben werden, um zu versuchen(). Ich bin sicher, das war ein Problem, aber Sie könnten mehr als eins haben. Stellen Sie sicher, dass das Passwort in Ihrer Benutzertabelle korrekt gespeichert ist. –

+0

Hier ist, wie ich die Benutzer in der Datenbank speichern: 'Route :: Post ('neu-Benutzer', Funktion() { $ Name = Eingabe :: get ('Name'); $ E-Mail = Eingabe :: get ('email'); $ password = Hash :: make (Eingabe :: get ('password')); $ user = neuer Benutzer; $ user-> name = $ name; $ user-> email = $ email; $ user-> password = $ password; $ user-> save(); }); ' sorry ich nicht‘ wissen, wie Sie den Code zeigen, richtig hier. – John

6

Ihr Code nervt, weil Sie die falschen Variablen Auth::attempt() sind vorbei. Diese Methode erfordert ein Array mit Schlüssel Benutzername, Passwort und optional zu erinnern. In diesem Licht sollte Ihr vorstehender Code sein:

Route::post('login', function() 
{ 
    $credentials = [ 
     'username' => Input::get('email'), 
     'password' => Input::get('password') 
    ]; 

    dd(Auth::attempt($credentials)); 
}); 

Hoffnung, die hilft.

Auch werde ich Ihnen Schnipsel von zusätzlichen Code geben Sie Ihren Arbeitsablauf zu verbessern. Route zu speichern, neue Benutzer:

Route::post('register', function() 
{ 
    $input = Input::only(['username', 'email', 'password']); 

    // validate data 

    Eloquent::unguard(); 

    $user = User::create($input); 

    Auth::loginUsingId($user->id); 

    return Redirect::to('dashboard'); 
}); 

dann in Ihrem Benutzermodell fügen Sie die Methode

public function setPasswordAttribute() 
{ 
    $this->password = Hash::make($this->password); 
} 

diese Weise wird das Passwort automatisch jedes Mal, gehasht wird es eingestellt ist

0

Sie implementieren sollten UserInterface-Klasse durch Laravel innerhalb Ihrer Modellklasse:

use Illuminate\Auth\UserInterface; 
use Illuminate\Auth\Reminders\RemindableInterface; 

class User extends Eloquent implements UserInterface, RemindableInterface 
{ 

Und denken Sie daran, dass es zwei abstrakte Methoden gibt, die Sie in Ihrem Modell deklarieren sollten. Sie können original User.php Modell

0

Ihr Passwort Länge Prüfen folgen. Es muss 60 oder höher in der Datenbank sein.

0

dies nicht funktionieren, weil Auth :: Versuch Passwort wandelt mit bcrypt Hash und sieht für diesen Hash-in Benutzer-Tabelle übereinstimmen.

kurz sollte das Passwort ein Hash in der Datenbank-Tabelle gespeichert sein für Auth :: Versuch zu arbeiten.

deshalb ist Ihre if() Bedingung fehlgeschlagen.

können Sie bcrypt (Passwort) verwenden Passwort in der Datenbank als Hash zu speichern und dann Auth verwenden :: Versuch

unterhalb von Laravel docs ist

https://laravel.com/docs/5.2/authentication#authenticating-users

Der Versuch Methode ein akzeptiert Array von Schlüssel/Wert-Paaren als erstes Argument . Die Werte im Array werden verwendet, um den Benutzer in Ihrer Datenbanktabelle zu finden. Im obigen Beispiel wird der Benutzer durch den Wert der E-Mail-Spalte abgerufen. Wenn der Benutzer gefunden wird, wird das in der Datenbank gespeicherte Hash-Kennwort mit dem an die Methode über das Array übergebenen Hash-Kennwortwert verglichen. Wenn die beiden Hash-Passwörter mit einer authentifizierten Sitzung übereinstimmen, wird der Benutzer für gestartet.

Die Methode test gibt true zurück, wenn die Authentifizierung erfolgreich war. Andernfalls wird false zurückgegeben.

Verwandte Themen