2011-12-27 132 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