使用sfGuard验证用户凭据

时间:2011-12-27 15:37:20

标签: php symfony1 login propel sfguard

我使用带有Propel的sfGuard的symfony 1.4,并且考虑到这是我的第一次symfony体验,我仍然是该体系结构的一部分。

我被要求创建一些web服务,其中一个应该是用户(电子邮件)和密码,并打印出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 个答案:

答案 0 :(得分:1)

看看sfGuardValidatorUser课程。 基本上它是这样的:

  1. 检查具有给定用户名的用户是否存在
  2. 如果1.然后检查它是否处于活动状态(is_active字段)
  3. 如果2.然后使用checkPassword类中的sfGuardUser公共方法检查密码(默认类似于sha1(db_salt.submitted_password) == db_password

答案 1 :(得分:0)

好的,我发现了一个肮脏的伎俩,但它确实有效。

我可以伪造一个登录表单提交并按常用的登录模式,它变成类似:

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

        }

我希望这可以帮助某些人陷入同样的​​困境。