2017-01-26 4 views
0

Ich versuche Doctrine 2 Auth für eine Laravel 5.3 App einzurichten. Ich benutze die Laravel-generierten Auth-Controller, so dass es nicht meine eigene benutzerdefinierte Implementierung ist. Ich habe ein paar kleine Änderungen vorgenommen (nämlich den Benutzer mit Dotrine in der Datenbank zu belassen) und die Registrierung funktionierte, aber wenn ich versuche mich anzumelden, bleibt die Authentifizierung aus.Laravel-Authentifizierung hasValidCredentials fehlgeschlagen

Ich habe mit einem Debugger trat durch und es scheint, konsequent auf die Funktion hasValidCredentials werden Fehler (an Verkäufer/Laravel/Rahmen/src/Illuminate/Auth/SessionGuard.php) wie nachfolgend beschrieben:

/** 
    * Check the given plain value against a hash. 
    * 
    * @param string $value 
    * @param string $hashedValue 
    * @param array $options 
    * @return bool 
    */ 
    public function check($value, $hashedValue, array $options = []) 
    { 
     if (strlen($hashedValue) === 0) { 
      return false; 
     } 

     return password_verify($value, $hashedValue); 
    } 

als Referenz sind meine Werte für $ Wert und $ HASHEDVALUE wie folgt:

= "Tester"

$ value;
$ hashedValue = "$ 2y $ 10 $ ZSLRE3LAVA8myaH8mu6TNeumQxHdmKRbv/zZdFQeDujZ8JolshTOu";

Ein Screenshot der Variablen wie pro meine letzte XDebug Sitzung zeigt die genaue Art der Variablen:

credential values

Die $ HASHEDVALUE ist die verschlüsselte Version des Kennworts (bcrypt verwenden) „Tester "Daher weiß ich, dass die Zugangsdaten zu 100% korrekt sind. Wenn die Ausführung jedoch password_verify erreicht, wird sie immer als false ausgewertet und die Überprüfung von hasValidCredentials schlägt fehl.

ich meinen Benutzers bin Speicherung wie in meiner Datenbank folgt: user table setup

So weiß ich, dass das Hash-Passwort lang genug ist, und in der Datenbank gespeichert werden. Ich sehe, dass $ hashedValue in doppelten Anführungszeichen zurückgegeben wird, könnte dies ein Problem sein?

Unabhängig davon kann ich mich nicht anmelden, da die Versuchsfunktion der Session Guard-Klasse immer fehlschlägt, da hasValidCredentials immer false zurückgibt, und ich bin ziemlich ratlos, da die Berechtigungsnachweise korrekt sind.

Fragen Sie sich, ob jemand irgendwelche Ideen hat, wie man das löst?

Dank

+1

Es scheint, dass die folgenden auswertet, um wahr: 'password_verify ('geheimes Passwort', '2j $ 10 $ $ EnIi90KP.0BqCVJgK21BrO3xzArxCZaiAPaUebCw.K2Xw71QOCZv2');' – liamjnorman

+0

Sie beachten Sie, dass meine app Schlüssel in base64 ist codiert.Könnte das auch Probleme beim Generieren des Hashes verursachen? – liamjnorman

Antwort

1

password_verify ist eine native PHP-Funktion, im Grunde das Gegenstück zu password_hash. da

password_verify('tester', '$2y$10$ZSLRE3LAVA8myaH8mu6TNeumQxHdmKRbv/zZdFQeDujZ8JolshTOu'); 

kehrt false, Ihre $hashedValue ist nicht der verschlüsselten Wert von tester.

Meine Vermutung wäre, dass Sie irgendwie Ihr Passwort doppelt verschlüsselt, z. Ihre Laravel-Komponente und Ihre Doktrin-Komponente hashen beide den Passwortwert.

Beachten Sie, dass Laravel's app.key nicht für die Verschlüsselung der Passwörter verwendet wird, wie Sie in der BcryptHasher sehen können, daher kann es das Ergebnis nicht beeinflussen.

+1

Danke Passioncoder. Ich habe bcrypt darauf ausgeführt, nachdem Laravel bereits Hash :: make auf dem Input ausgeführt hatte. – liamjnorman

Verwandte Themen