Я считаю, что то, что вы хотите сделать, имеет собственную страницу в документации. Взгляните на How to create a custom user provider, он дает хорошее пошаговое руководство, как вы можете использовать веб-сервис для аутентификации вашего пользователя.
UPDATE:
Да, ссылка я делил говорит вам, как создать пользователя поставщика. И это именно то, что вы должны сделать. В самом первом абзаце этой страницы говорится:
Когда пользователь отправляет имя пользователя и пароль, уровень аутентификации запрашивает у настроенного провайдера пользователя возврат пользовательского объекта для данного имени пользователя.
Так что вам нужно создать класс, который расширяет UserInterface
, и этот класс должен иметь все свойства, которые возвращаются из вашего веб-сервиса (также по умолчанию, пользовательским интерфейсом требуется несколько свойств, таких как имя пользователя, пароль , соль и роли. Но соль и роли могут быть пустыми, если вы их не используете).
Затем вы создаете поставщика услуг, который реализует UserProviderInterface
. Это приведет к тому, что функция loadUserByUsername
вызывается при выполнении логина. В этой функции вы выполняете свой запрос webservice, отправляя учетные данные. Затем ответ вашего запроса можно сопоставить с вашим классом User, который вы создали. Затем вы возвращаете объект User, который вы создали, с данными, которые были возвращены из вашего веб-сервиса.
Для того, чтобы Symfony узнала, что вы хотите использовать свой пользовательский поставщик для входа в форму, вам необходимо создать службу для вашего провайдера. Таким образом, в src/Acme/WebserviceUserBundle/Resources/config/services.yml
(возможно, потребуется создать файл), вы можете добавить услугу, как это описывается в документации:
parameters:
# path to the user provider you just created
webservice_user_provider.class: Acme\WebserviceUserBundle\Security\User\WebserviceUserProvider
services:
webservice_user_provider:
class: "%webservice_user_provider.class%"
После того, как вы создали этот сервис, то вы просто скажите форму входа, чтобы использовать этот обычай поставщик. В security.yml:
security:
providers:
webservice:
# this id is the name of the service you created
id: webservice_user_provider
Кроме того, если ваш пароль зашифрован в вашем веб-сервиса, вы должны убедиться, что Symfony шифрует это один и тот же способ сделать сравнение. Так что в безопасности.yml Вы можете добавить
security:
encoders:
Acme\WebserviceUserBundle\Security\User\WebserviceUser: sha512 # or md5, or others
Это показывает, как создать поставщика услуг. Но я должен отправить пароль в веб-сервис, и служба вернет пользовательские данные, если пароль хороший. Поэтому после того, как я позвоню в веб-сервис, мне придется аутентифицировать пользователя. Как пропустить остальные шаги Symfony? – Daniel
Я обновил ответ. Вы должны создать пользовательский поставщик. Это единственный путь. – Sehael
Это дает пользователю закодированный пароль, так что symfony может проверить, совпадает ли он. Но я не могу этого сделать, потому что веб-сервис ожидает пользователя и пароль, предоставленные пользователем. Я должен отправить пользователю и пароль в веб-службу следующим образом: https: // host/check? User = admin & password = 12345, и веб-служба ответит (с данными профиля пользователя), если учетные данные правильные или нет. – Daniel