Пользовательский вход с использованием третьего параметра - PullRequest
9 голосов
/ 11 марта 2012

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

У меня есть основы и я работаю просто отлично.

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

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

Как можноЯ использую это значение экосистемы, которое нужно учитывать при выполнении входа в систему?

Ответы [ 2 ]

6 голосов
/ 11 марта 2012

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

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

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


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

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

0 голосов
/ 15 августа 2015

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...