Я работаю над относительно простой системой входа для Symfony2.
У меня есть основы и работа в порядке.
Что делает это немного особенным, мне нужен способ предоставить третье значение (значение экосистемы). Имена пользователей в моей базе данных не уникальны сами по себе, а создают уникальные пары с стоимостью экосистемы.
Значение экосистемы определяется формой, из которой они регистрируются.
Как я могу использовать эту ценность экосистемы при принятии логина?
Взгляните на учебник поваренной книги о том, как загрузить пользователей безопасности из базы данных (поставщик сущностей) – в частности, часть об аутентификации кого-то с помощью поставщика пользовательского сущ .
В этой части объясняется, как изменить / создать UserProviderInterface
чтобы разрешить вход в систему через адрес электронной почты или имя пользователя. Очевидно, это не то, что вы хотите, но – должно быть относительно тривиально модифицировать код, чтобы также запрашивать / проверять ваш третий параметр входа.
В идеале вы, вероятно, захотите создать свой собственный UserProvider и, к счастью, есть учебник поваренной книги только для этого: как создать пользовательский поставщик .
Обновление. Чтобы иметь третий вариант входа в систему и передан вашим заказчикам (созданному выше), вам также потребуется создать собственный поставщик аутентификации. Взгляните на статью (еще одну) поваренной книги о том, как создать собственный поставщик аутентификации . Эта статья предназначена для обработки дополнительных параметров заголовка запроса для аутентификации, но с использованием этого примера вы должны иметь возможность обменивать заголовки запросов на значения POST запроса.
Используйте статью поваренной книги, чтобы понять, как работает аутентификация с Symfony2, но используйте (и расширьте) функциональность имени пользователя и пароля Symfony2 и просто включите свой третий параметр. Некоторые классы, на которые нужно смотреть:
Вы можете создать собственный аутентификатор паролей (> = Symfony 2.6) и установить там атрибуты:
В authenticateToken () у вас есть UserProvider и loadUserByUsername. То, что я сделал, это использование моего провайдера (который расширяет FOSUserBundle и переопределяет указанный метод) и передает ему массив с именем пользователя и другими необходимыми данными. Не забудьте проверить, что передается внутри loadUserByUsername (например, если это строка, а затем вызвать parent :: loadUserByUsername).
Я уверен, что этот трюк с loadUserByUsername плохой, но я не знаю, как еще это можно сделать.