2013-07-04 70 views
1

我正在學習Symfony2,我喜歡它!
我一直在使用偉大的書和食譜,但我無法在任何地方找到我的問題的答案。
我正在使用另一個第三方登錄API,但響應速度有點慢,所以我想將已知用戶存儲在我自己的數據庫中以加快響應速度。
我設法創建了我自己的數據庫與entity provider,它的工作原理。
現在,我想讓Symfony在登錄失敗時嘗試使用我的其他服務登錄。在Symfony2中的另一個服務上重試登錄失敗

這是在哪裏,我會發現它合乎邏輯地把我的新代碼。

public function loadUserByUsername($username) { 

    $q = $this 
      ->createQueryBuilder('u') 
      ->where('u.username = :username') 
      ->setParameter('username', $username) 
      ->getQuery(); 

    try { 
     $user = $q->getSingleResult(); 
    } catch (NoResultException $e) { 

     // Try login to other service before failing 
     $login = $APIHelper->login($username, $password); 

     if ($login) { 
      // Make sure the user is persisted to database 
      ... 
      // Return the user 
      return $login->getUser(); 
     } 
     else { 
      $message = sprintf(
       'Unable to find user SHSnaphackBundle:User object identified by "%s".', $username 
      ); 
      throw new UsernameNotFoundException($message, 0, $e); 
     } 
    } 

    return $user; 
} 

我會認爲,這將工作完美,但無法找到任何方式獲取密碼,用戶試圖登錄?

這是所有爲此目的正確的文件?

回答

0

一個實體提供者本身並不合適,因爲安全框架(是正確的,實體提供者)進行密碼檢查。對於高級安全性的東西,您必須瞭解安全系統的內部,尤其是authentication部分。對於你的用例,你需要write an authentication provider這是你的問題發佈的工作。