Аутентифицироваться с помощью sfguarduser без http логина
Я пытаюсь разработать веб-сервис в приложении на основе Symfony, мы используем плагин sfguarduser, и я хочу, чтобы аутентификация учетных данных пользователя выполнялась в одном запросе, чтобы проверить права пользователя и затем выполнить действие веб-сервиса, есть ли способ выполнить вход в систему без html формы входа?
1 ответ
В вашем действии сделайте следующее:
$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();
}
Надеюсь, поможет.