2017-06-30 4 views
1

Gibt es eine Möglichkeit, den Standardauthentifizierungsanbieter UserAuthenticationProvider von $app['security.authentication_manager'] zu entfernen?Silex 2: Entfernen des Standardauthentifizierungsanbieters UserAuthenticationProvider

Ich habe meinen eigenen Authentifizierungsanbieter erstellt und möchte nicht den Standard verwenden, der DaoAuthenticationProvider aufruft, um das Benutzerkennwort zu überprüfen, da der Authentifizierungsprozess nicht so funktioniert.

Zu diesem Zeitpunkt ruft der Authentifizierungsmanager die beiden Authentifizierungsanbieter an: my custom und der Standardwert. Um eine erfolgreiche Authentifizierung zu ermöglichen, überschreibe ich das DAO, um die Tests zu überspringen, aber es ist nicht sauber.

Benutzerdefinierte Authentifizierungsanbieter

$app['security.authentication_listener.factory.sds'] = $app->protect(function ($name, $options) use ($app) { 
    // define the authentication provider object 
    $app['security.authentication_provider.'.$name.'.sds'] = function() use ($app) { 
     return new CustomAuthenticationProvider($app['user.provider'], $app['security.encoder_factory']); 
    }; 

    // define the authentication listener object 
    $app['security.authentication_listener.'.$name.'.sds'] = function() use ($app) { 
     return new CustomAuthenticationListener($app['security.token_storage'], $app['security.authentication_manager']); 
    }; 

    return array(
     // the authentication provider id 
     'security.authentication_provider.'.$name.'.sds', 
     // the authentication listener id 
     'security.authentication_listener.'.$name.'.sds', 
     // the entry point id 
     null, 
     // the position of the listener in the stack 
     'pre_auth' 
    ); 
}); 

die DAO überschreiben Tests eine benutzerdefinierte calss und überspringen zu verwenden.Ich möchte diesen Punkt vermeiden, indem Sie den DAO-Aufruf vom Authentifizierungsmanager entfernen.

$app['security.authentication_provider.dao._proto'] = $app->protect(function ($name) use($app) { 
     return new \Trilogis\Classes\CustomUserAuthenticationProvider(
      $app['security.user_provider.' . $name], 
      $app['security.user_checker'], 
      $name, 
      $app['security.encoder_factory'] 
     ); 
    }); 
+0

Sicherheits Config hinzufügen für 'sds' Firewall –

Antwort

0

Nur eine schnelle Vermutung, aber man konnte das $app['security.authentication_providers'] Array versuchen, um zwingend Sie nur zu ermöglichen.

<?php 
//... 
// overriding available providers to only allow mine 
$app['security.authentication_providers'] = [ 
    $app['security.authentication_listener.factory.sds'] 
]; 

Durch sie überschreiben, sind Sie configuring the Authentication Manager with only one provider.

IMHO, das ist sauberer als das Überschreiben der DaoAuthenticationProvider