Сложность при входе в систему заключается в том, что тестовый браузер стирает объект контекста перед каждым запросом (см. sfBrowser :: call () ).
Вы можете аутентифицировать пользователя, введя слушателя, который вызовет пользовательский метод signIn()
, когда событие context.load_factories
срабатывает во время инициализации контекста:
function signin( sfEvent $event )
{
/* @var $user sfGuardSecurityUser */
if( ! $user = $event->getSubject()->getUser() )
{
throw new RuntimeException('User object not created.');
}
if( ! $user instanceof sfGuardSecurityUser )
{
throw new LogicException(sprintf(
'Cannot log in %s; sfGuardSecurityUser expected.',
get_class($user)
));
}
if( $user->isAuthenticated() )
{
$user->signOut();
}
/* Magic happens here: */
$user->signIn($desired_user_to_log_in_as);
$event->getSubject()->getEventDispatcher()->notify(new sfEvent(
$this,
'application.log',
array(sprintf('User is logged in as "%s".', $user->getUsername()))
));
}
/* Set signin() to fire when the browser inits the context for subsequent
* requests.
*/
$b->addListener('context.load_factories', 'signin');
Это приведет к тому, что браузер зарегистрирует пользователя для всех последующих запросов. Обратите внимание, что sfBrowser
не не имеет метод removeListener()
.
Адаптировано из sfJwtPhpUnitPlugin (Ф.Д .: Я ведущий разработчик этого проекта).