У меня есть мыло для аутентификации пользователей
<?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!';
Я хотел бы использовать в Symfony2 без базы данных, только в памяти …
Я попытался реализовать пользовательский UserProvider , но у меня нет всех данных, необходимых для его работы …
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) ); }
Я не могу изменить мыло
Извините за мой плохой английский! 🙁
Насколько я понимаю, вы хотите использовать проверку подлинности и проверку пароля с помощью службы SOAP.
Если вы используете Symfony 2.4 или выше, вы можете использовать SimpleFormAuthenticatorInterface
Пример реализации:
// ... 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); } }