2016-10-15 3 views
0

Ich versuche, Benutzer, die in einer Datenbank gespeichert sind, mit dem SecurityProvider zu meiner Silex-Website hinzuzufügen.Silex - UserProviderInterface gibt immer "Bad credentials" zurück

ich registriert die Sicherheitsanbieter

$app['security.firewalls'] = array 
(
    'admin' => array 
    (
     'pattern' => '^/admin', 
     'form' => array('login_path' => '/login', 'check_path' => '/admin/login_check'), 
     'logout' => array('logout_path' => '/admin/logout', 'invalidate_session' => true), 
     'users' => function() use($app) 
     { 
      return new Entity\UserProvider($app); 
     } 
    ) 
); 

Und die Entity\UserProvider($app) Klasse geht als (nur ein Teil des Codes angezeigt wird) folgen

class UserProvider implements UserProviderInterface 
{ 
    public function loadUserByUsername($username) 
    {  
     return new User('blabla', 'patate', ['ROLE_ADMIN'], true, true, true, true); 
    } 
} 

Aber auch wenn ich einen neuen Benutzer zurückkehren, und werfen Sie keine UsernameNotFoundException die Anmeldeseite gibt mir immer noch eine Bad credentials. Nachricht.

Warum erhalte ich diese Fehlermeldung? Habe ich etwas vergessen? Habe ich etwas Config versaut?

Dank

+0

Wie fügst du Benutzer zur DB hinzu? –

+0

Momentan gibt es keine Benutzer und keine Verbindung zur Datenbank. Ich versuche nur, das Benutzer-System mit gefälschten Daten einzurichten, bevor ich eine Verbindung mit der Datenbank herstelle. – Wndrr

Antwort

1

Passwort Encoder algorytms, die in silex verwendet werden und auf die Schaffung von Benutzer unterscheiden.

Encoder in silex wird durch Parameter security.default_encoder

$app['security.default_encoder'] = function ($app) { 
    return $app['security.encoder.bcrypt']; 
}; 
... 
$app['security.encoder.bcrypt'] = function ($app) { 
    return new BCryptPasswordEncoder($app['security.encoder.bcrypt.cost']); 
}; 

Verwenden bcrypt für Passwortverschlüsselung auf Benutzererstellung

return new User(
    'blabla', 
    $app['security.encoder.bcrypt']->encodePassword('patate', ''), 
    ['ROLE_ADMIN'], 
    true, true, true, true 
); 

Oder silex-Encoder (ohne Codierung) auf Plaintext ändern zu überprüfen, ob Login

funktioniert
$app['security.default_encoder'] = function ($app) { 
    return new \Symfony\Component\Security\Core\Encoder\PlaintextPasswordEncoder(); 
}; 
0

Danke Max P. für Ihre Antwort, Du hast mich zur Lösung geführt. Sie haben mich gefragt, warum Sie bei der Verwendung gefälschter Daten über die Passwortverschlüsselung sprechen würden, also habe ich überprüft, was passieren würde, wenn ich die gleichen Werte überall verwenden würde.

Das einzige Problem war die Tatsache, dass ich gefälschte Daten verwendet habe. Ich ging davon aus, dass die Daten, die ich im Login-Formular zur Verfügung stellte, direkt in Vergessenheit geraten würden, aber in der Tat stellt Silex sicher, dass die Daten aus dem Formular mit den Daten in der zurückgegebenen User-Entität übereinstimmen.

Wenn dies nicht der Fall ist, wird implizit der Fehler "Ungültige Anmeldeinformationen" ausgegeben. (Es wäre schön, wenn die Silex Logs mir das gesagt hätten ...)

Verwandte Themen