2011-12-27 95 views
0

我将symfony 1.4与sfGuard一起用于Propel,并且考虑到这是我的第一次symfony体验,所以我仍然对这个体系结构的某些部分采用总体noob。使用sfGuard验证用户凭证

我被要求创建一些web服务,其中一个应该是以用户(email)和密码打印出一个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

您不需要请求。只需使用数组作为绑定方法。 – 2011-12-27 16:37:32

1

只是看看sfGuardValidatorUser类。 基本上它是这样的:

  1. 检查是否与给定用户名的用户存在
  2. 如果1,然后检查它是否有效(IS_ACTIVE场)
  3. 如果2.然后检查使用checkPassword密码从sfGuardUser类的公共方法(默认是一样的东西sha1(db_salt.submitted_password) == db_password