2014-09-06 9 views
5

ich eine Seife haben Benutzer zu authentifizierenPHP Symfony2 benutzerdefinierte Authentifizierung ohne Datenbank (SOAP)

<?php 
$client = new SoapClient('http://mysite/code/soap.wsdl'); 
$user = $client->login('username','password'); 

if(isset($user['IdAccount']) && ($user['IdAccount'] > 0)) 
    echo 'Logon OK'; 
else 
    echo 'Logon Fail!'; 

Ich möchte in Symfony2 ohne Datenbank verwenden, nur im Speicher ...

Ich habe versucht, zu implementieren ein Custom UserProvider, aber ich habe nicht alle erforderlichen Daten für die es ...

funktioniert
class WebserviceUserProvider implements UserProviderInterface 
{ 
    public function loadUserByUsername($username) 
    { 
     $client = new SoapClient('http://mysite/code/soap.wsdl'); 

     $user = $client->login($username, PASSWORD????); 

     if (isset($user['IdAccount']) && ($user['IdAccount'] > 0)) 
      return new WebserviceUser($username, PASSWORD????, SALT???, ROLES????); 

     throw new UsernameNotFoundException(sprintf('Username "%s" does not exist.', $username) 
    ); 
} 

ich kann nicht die Seife ändern

Entschuldigung für mein schlechtes Englisch! :(

+2

Um es richtig zu machen, benötigen Sie Ihren eigenen Authentifizierungsanbieter http://symfony.com/doc/current/cookbook/security/custom_authentication_provider.html Nicht auf einfache Weise zu implementieren Anleitung rückwärts funktioniert am besten. Ich würde jedoch dringend empfehlen, nach einem SOAP-Authentifizierungspaket zu suchen. Ich bin mir sicher, dass es ein paar gute gibt. – Cerad

Antwort

2

Wie ich verstehe, wollen Sie Formular-Authentifizierung verwenden und das Kennwort überprüfen SOAP-Dienst

Wenn Sie Symfony 2.4 verwenden oder oben können Sie SimpleFormAuthenticatorInterface

Beispiel-Implementierung verwenden.

// ... namespace and uses 

class Authenticator implements SimpleFormAuthenticatorInterface 
{ 
    private $soapClient; 

    public function __construct(\SoapClient $soapClient) 
    { 
     $this->soapClient = $soapClient; 
    } 

    public function authenticateToken(TokenInterface $token, UserProviderInterface $userProvider, $providerKey) 
    { 
     $user = $this->soapClient->login($token->getUsername(), $token->getCredentials()); 
     if (isset($user['IdAccount']) && ($user['IdAccount'] > 0)) { 
      $user = $userProvider->loadUserByUsername($token->getUsername()); 
      return new UsernamePasswordToken(
       $user, 
       null, 
       $providerKey, 
       $user->getRoles() 
      ); 
     } 

     throw new AuthenticationException('Invalid username or password'); 
    } 

    public function supportsToken(TokenInterface $token, $providerKey) 
    { 
     return $token instanceof UsernamePasswordToken 
      && $token->getProviderKey() === $providerKey; 
    } 

    public function createToken(Request $request, $username, $password, $providerKey) 
    { 
     return new UsernamePasswordToken($username, $password, $providerKey); 
    } 
} 
+0

Aber ich verstehe nicht, wie man 'UserProviderInterface' für' $ userProvider-> loadUserByUsername ($ token-> getUsername()) implementiert ' –

+1

Sie können diese Zeile einfach überspringen und Benutzerobjekt (sollte' UserInterface' implementieren) aus dem SOAP erstellen Methodenergebnis. Oder erstelle einfach eine leere Datei (zum Beispiel 'Symfony \ Component \ Security \ Core \ User \ User') und setze nur den Benutzernamen ein. Keine Notwendigkeit, den UserProvider dort zu verwenden. –

Verwandte Themen