2012-05-15 11 views
5

¿Alguien tiene un ejemplo o alguna idea de cómo se implementaría FOSRestBundle junto con FOSUserBundle? Tengo una aplicación web ya desarrollada con Symfony 2 y FOSUserBundle, pero me gustaría agregar FOSRestBundle para una capa de API. Deseo poder pasarle un nombre de usuario y una contraseña, y recibir algún tipo de token del FOSUserBundle que represente al usuario conectado que luego puedo pasar entre otras llamadas de API. ¿Alguien sabe de una buena manera de hacer esto?Integración de FosUserBundle con FosRestBundle

+1

Por cierto tener en cuenta para actualizar el FOSUserBundle a la última versión, hubo algunos problemas de seguridad. Consulte el blog de Symfony para obtener más información: http://symfony.com/blog/security-release-fosuserbundle – F481

Respuesta

3

FOSUserBundle debe ser nativamente "tranquilo", lo que significa que puede seguir las recomendaciones de REST.

Sin embargo, no está diseñado para funcionar de forma nativa con FOSRestBundle, la forma más sencilla de hacerlo es anular el UserController en su paquete y adaptar sus acciones.

Por ejemplo, para permitir el registro reparador, se puede escribir la siguiente acción:

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