Пользовательский вход с использованием третьего параметра

Я работаю над относительно простой системой входа для Symfony2.

У меня есть основы и работа в порядке.

Что делает это немного особенным, мне нужен способ предоставить третье значение (значение экосистемы). Имена пользователей в моей базе данных не уникальны сами по себе, а создают уникальные пары с стоимостью экосистемы.

Значение экосистемы определяется формой, из которой они регистрируются.

Как я могу использовать эту ценность экосистемы при принятии логина?

Solutions Collecting From Web of "Пользовательский вход с использованием третьего параметра"

Взгляните на учебник поваренной книги о том, как загрузить пользователей безопасности из базы данных (поставщик сущностей) – в частности, часть об аутентификации кого-то с помощью поставщика пользовательского сущ .

В этой части объясняется, как изменить / создать UserProviderInterface чтобы разрешить вход в систему через адрес электронной почты или имя пользователя. Очевидно, это не то, что вы хотите, но – должно быть относительно тривиально модифицировать код, чтобы также запрашивать / проверять ваш третий параметр входа.

В идеале вы, вероятно, захотите создать свой собственный UserProvider и, к счастью, есть учебник поваренной книги только для этого: как создать пользовательский поставщик .


Обновление. Чтобы иметь третий вариант входа в систему и передан вашим заказчикам (созданному выше), вам также потребуется создать собственный поставщик аутентификации. Взгляните на статью (еще одну) поваренной книги о том, как создать собственный поставщик аутентификации . Эта статья предназначена для обработки дополнительных параметров заголовка запроса для аутентификации, но с использованием этого примера вы должны иметь возможность обменивать заголовки запросов на значения POST запроса.

Используйте статью поваренной книги, чтобы понять, как работает аутентификация с Symfony2, но используйте (и расширьте) функциональность имени пользователя и пароля Symfony2 и просто включите свой третий параметр. Некоторые классы, на которые нужно смотреть:

  • UsernamePasswordFormAuthenticationListener
  • UsernamePasswordToken
  • UserAuthenticationProvider

Вы можете создать собственный аутентификатор паролей (> = Symfony 2.6) и установить там атрибуты:

  1. createToken (): Создайте токен (вы можете использовать UsernamePasswordToken) и установите для него атрибут, возьмите необходимые данные из запроса $.
  2. authenticateToken (): Здесь вы делаете что-то с этой третьей переменной ($ token-> getAttribute ()). Если это влияет на loadUserByUsername, прочитайте ниже.

В authenticateToken () у вас есть UserProvider и loadUserByUsername. То, что я сделал, это использование моего провайдера (который расширяет FOSUserBundle и переопределяет указанный метод) и передает ему массив с именем пользователя и другими необходимыми данными. Не забудьте проверить, что передается внутри loadUserByUsername (например, если это строка, а затем вызвать parent :: loadUserByUsername).

Я уверен, что этот трюк с loadUserByUsername плохой, но я не знаю, как еще это можно сделать.