проверить учетные данные пользователя с помощью sfGuard - PullRequest
0 голосов
/ 27 декабря 2011

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

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

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

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

id  username                algorithm   salt                            password                                    created_at              last_login              is_active   is_super_admin
4   myuser@myhostname.com   sha1    623de866b49c696b452e0d12b55895c8    dcbe87a60a769b9e3b5f0988141b824fa5206235    2011-12-06 02:32:43     2011-12-27 15:49:41     1           0

Ответы [ 2 ]

1 голос
/ 27 декабря 2011

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

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

Хорошо, я нашел подвох, но он работает.

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

        $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));

        }

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

...