Symfony 2 UserInterface :: equals ($ user): сравнение для повторной аутентификации - PullRequest
2 голосов
/ 10 декабря 2011

Из класса UserInterface

interface UserInterface {
    /**
     * The equality comparison should neither be done by referential equality
     * nor by comparing identities (i.e. getId() === getId()).
     *
     * However, you do not need to compare every attribute, but only those that
     * are relevant for assessing whether re-authentication is required.
     *
     * @param UserInterface $user
     * @return Boolean
     */
    function equals(UserInterface $user);
}

Как мне реализовать это (" те, которые имеют отношение к оценке необходимости повторной аутентификации ")? Так значит ли это, что после Symfony 2 повторно аутентифицируется (имя пользователя / пароль) пользователя? Или эта функция пользователя для повторной аутентификации. Могу ли я проверить id, username, password, salt возможно? Разве Symfony не аутентифицирует пользователя с помощью проверки пароля, чего должно быть достаточно?

Ответы [ 2 ]

8 голосов
/ 10 декабря 2011

Если equals() возвращает false, пользователь будет вынужден повторно подтвердить свою подлинность. Что именно вы проверяете, зависит от вас, потому что оно отличается от одного приложения к другому. Как правило, вам нужно сравнивать все, что может изменить пользователь, влияющий на безопасность вашего приложения.

Например, если электронная почта и пароль используются для аутентификации в вашем приложении, вам необходимо сравнить их. Напротив, сравнивать поля имени и фамилии не имеет смысла, поскольку они не влияют ни на что, связанное с аутентификацией в вашем приложении - если, конечно, аутентификация вашего приложения каким-то образом основана на них.

Если вы поддерживаете разные роли в своем приложении - например, администратор и обычный пользователь - и ваше приложение предоставляет способ назначения и переназначения этих ролей пользователям, вам также необходимо сравнить роли. Потому что, если вы хотите понизить пользователя от администратора до обычного пользователя, вы хотите, чтобы это изменение вступило в силу как можно скорее - при следующем запросе пользователя - без явного запроса на выход из системы и повторную регистрацию. Если вы не сравниваете роли в этом случае, пользователь останется администратором до истечения срока его сеанса.

Проверка идентификатора не имеет смысла, если ваше приложение не предоставляет способ изменить идентификаторы пользователя и они не используются в целях аутентификации в вашем приложении. И я бы тоже не стал проверять соль, потому что, если она будет изменена, это также означает, что пароль тоже будет изменен, поэтому достаточно будет проверить только пароль.

1 голос
/ 04 ноября 2016

Обновление:

Теперь функция равенства была удалена из UserInterface и добавлена ​​в новый интерфейс: EquatableInterface , а имя функции было изменено на isEqualTo .

Таким образом, если вы хотите изменить логику, которая заставляет подключенного пользователя отключаться, ваш класс User должен реализовать интерфейсную функцию EquatableInterface isEqualTo .

Будьте осторожны: если вы это сделаете, вы потеряете стандартную проверку пользователя, которая проверяет измененный пароль, измененное имя пользователя, ...

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