В вашем действии сделайте следующее:
$this->getUser()->signin($sfGuardUserObject);
Который вы должны вызвать с помощью объекта sfGuardUser. Вы можете поместить этот код в метод preExecute () модуля, чтобы проверять каждый запрос.
Я делал нечто подобное, когда выполнял действие «активировать учетную запись». После создания учетной записи отправляется письмо с токеном, содержащее ссылку на сайт. Маркер отправляется в URL-адресе и сопоставляется на маршруте к действию. Затем действие проверяет, есть ли у пользователя этот токен, и затем регистрирует пользователя. Это то, что я сделал:
public function executeActivate(sfWebRequest $request)
{
// if token is not present, forward to 404
$this->forward404Unless($request->getParameter('token'), 'page', 'index');
$this->profile = sfGuardUserProfilePeer::activateProfileByToken($request->getParameter('token'));
// if someone was activated, return the mobile activation form and success page
if (!$this->profile)
{
$this->redirect404();
}
// sign the user in
$this->getUser()->signin($this->profile->getsfGuardUser());
// set the $user variable for the template
$this->user = $this->profile->getsfGuardUser();
}
Надеюсь, это поможет.