2012-05-15 65 views
5

有沒有人有一個例子或任何想法如何將FOSRestBundle和FOSUserBundle一起實現。我有一個已經與Symfony 2和FOSUserBundle開發的Web應用程序,但我想爲api圖層添加FOSRestBundle。我希望能夠傳遞一個用戶名和密碼,並從FOSUserBundle接收一些代表登錄用戶的令牌,然後我可以在其他API調用之間傳遞。有誰知道這樣做的好方法嗎?FosUserBundle與FosRestBundle的集成

+1

順便記住更新FOSUserBundle到最新版本,有一些安全問題。查看Symfony博客獲取更多信息:http://symfony.com/blog/security-release-fosuserbundle – F481

回答

3

FOSUserBundle應該是本地「寧靜」,這意味着它可以遵循REST推薦。

但是,它並不是設計爲與FOSRestBundle本機一起工作,最簡單的方法是重寫Bundle中的UsersController並調整您的操作。

例如,允許基於REST的註冊,可以編寫以下動作:

public function postUsersAction() 
    { 
     $form = $this->container->get('fos_user.registration.form'); 
     $formHandler = $this->container->get('fos_user.registration.form.handler'); 
     $confirmationEnabled = $this->container->getParameter('fos_user.registration.confirmation.enabled'); 

     $process = $formHandler->process($confirmationEnabled); 

     if ($process) { 
      $user = $form->getData(); 
      $authUser = false; 

      if ($confirmationEnabled) { 
      } else { 
       $authUser = true; 
      } 

      $response = new Response(); 

      if ($authUser) { 
       /* @todo Implement authentication */ 
       //$this->authenticateUser($user, $response); 
      } 

      $response->setStatusCode(Codes::HTTP_CREATED); 
      $response->headers->set(
       'Location', 
       $this->generateUrl(
        'api_users_get_user', 
        array('user' => $user->getId()), 
        true 
       ) 
      ); 

      return $response; 
     } 

     return RestView::create($form, Codes::HTTP_BAD_REQUEST); 
    }