2012-05-15 30 views
5

Có ai có ví dụ hay bất kỳ ý tưởng nào về cách triển khai FOSRestBundle cùng với FOSUserBundle. Tôi có một ứng dụng Web đã được phát triển với Symfony 2 và FOSUserBundle, nhưng tôi muốn thêm FOSRestBundle cho một lớp api. Tôi muốn để có thể vượt qua nó một tên người dùng và mật khẩu và nhận được một số loại mã thông báo từ FOSUserBundle đại diện cho người dùng đăng nhập mà sau đó tôi có thể vượt qua giữa các cuộc gọi api khác. Có ai biết một cách tốt để làm điều này?Tích hợp FosUserBundle với FosRestBundle

+1

Bằng cách ghi nhớ để cập nhật các FOSUserBundle lên phiên bản mới nhất, đã có một số vấn đề an ninh. Xem Blog của Symfony để biết thêm thông tin: http://symfony.com/blog/security-release-fosuserbundle – F481

Trả lời

3

FOSUserBundle nên nguyên bản "yên tĩnh" có nghĩa là nó có thể tuân theo các khuyến nghị REST.

Tuy nhiên, nó không được thiết kế để hoạt động nguyên bản với FOSRestBundle, cách đơn giản nhất để làm điều đó là ghi đè UsersController trong Gói của bạn và điều chỉnh các hành động của bạn.

Ví dụ, để cho phép đăng ký RESTful, bạn có thể viết các hành động sau đây:

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