2011-12-27 4 views
0

Я использую symfony 1.4 с помощью sfGuard с Propel, и, учитывая, что это мой первый опыт Symfony, я все еще являюсь полным noob с некоторой частью архитектуры.проверить учетные данные пользователя с помощью sfGuard

Мне было предложено создать несколько веб-сервисов, один из которых должен принимать пользователя (адрес электронной почты) и пароль и распечатывать обратную связь json-строки в результате.

У меня нет подсказки о том, как выполнить такую ​​задачу с помощью sfGuard, поэтому, если у кого-нибудь есть пример, это будет оценено.

Я думаю, что алгоритм должен быть sha1, поскольку в таблице sf_guard_user я нашел строки как

id username    algorithm salt       password         created_at    last_login    is_active is_super_admin 
4 [email protected] sha1 623de866b49c696b452e0d12b55895c8 dcbe87a60a769b9e3b5f0988141b824fa5206235 2011-12-06 02:32:43  2011-12-27 15:49:41  1   0 

ответ

0

Хорошо, я нашел грязный трюк, но он работает.

Я могу подделать представление формы Войти и sitck к обычному входа скороговоркой, что она становится чем-то вроде:

 $request->setParameter('signin', array(
       'username' =>$request->getParameter("username"), 
       'password' =>$request->getParameter("password"), 
      )); 
     $form = new BeetleLoginForm(); 
     $form->bind($request->getParameter('signin')); 
     if ($form->isValid()) { 
      $values = $form->getValues(); 
      $this->getUser()->signin($values['user'], false); 
      $resp['return'] = "YES"; 
      $resp['message'] = "You have successfully logged in"; 
      return $this->renderText(json_encode($resp)); 

     } 

Я надеюсь, что это может помочь кому-то застрял в том же подвешенном состоянии.

+0

Вам не нужен запрос. Просто используйте массив для метода bind. –

1

Просто взгляните на sfGuardValidatorUser класса. В основном это что-то вроде этого:

  1. Проверьте, если пользователь с данным именем существует
  2. Если 1. Затем проверьте, если он активен (is_active поле)
  3. Если 2. Затем проверьте пароль с помощью checkPassword публичный метод из sfGuardUser класса (по умолчанию это что-то вроде sha1(db_salt.submitted_password) == db_password)
Смежные вопросы