После некоторого исследования это так, как sfGuard проверяет все.
Когда вы делаете запрос к действию модуля перед выполнением действия, рассылается новый sfContext. sfContext получает пользователя, который расширяет sfGuardUser и имеет некоторые методы, которые выполняются. Существует где завивки, состояние сеанса и everithing еще проверяется Пользователь должен быть настроен в apps/yourApp/lib
По умолчанию это apps/yourApp/lib/myUser
, который проходит sfGuardUser. Самый простой способ достичь этого - создать новый пользовательский класс, например: apps/yourApp/lib/yourAppUser
, который расширяет aswell sfGuardUser и расширяет методы initialize
и/или shutdown
с необходимой функциональностью.
Таким образом, я достиг, чтобы Oauth2 от Google работал в моем приложении.
Надеюсь, это полезно для большего количества людей.
UPDATE Все описанные выше верно, но если вы хотите проверить, что-то всегда перед выполнением действия необходимо использовать фильтры вместо Whats описано выше. Фильтры выполняются перед каждым действием, поэтому вы можете проверить, что вам нужно иметь доступ к текущему контексту, и настроить новые атрибуты для пользователя. В моем случае я хочу проверить, требуется ли требуемому действию токен google, если true, тогда другой фильтр проверяет, имеет ли пользователь alraedy действительный токен, в этом случае ничего не происходит, иначе пользователь перенаправляется на модуль/действие который обрабатывает запросы токена Google.
Связь между различными фильтрами, действиями и запросами осуществляется через пользовательские атрибуты. пользователь является объектом класса myOwnUser, который расширяет sfGuardSecurityUser, там функция signOut расширяется, чтобы удалить все атрибуты, сохраненные в «myOwnNamespace»