2012-05-15 5 views
5

Qualcuno ha un esempio o un'idea su come implementare FOSRestBundle insieme al FOSUserBundle. Ho già sviluppato un'app Web con Symfony 2 e FOSUserBundle, ma vorrei aggiungere FOSRestBundle per un livello API. Voglio essere in grado di passargli un nome utente e una password e ricevere un certo tipo di token dal FOSUserBundle che rappresenta l'utente che ha effettuato l'accesso che posso quindi passare e passare tra altre chiamate API. Qualcuno sa di un buon modo per farlo?Integrazione di FosUserBundle con FosRestBundle

+1

A proposito tenere a mente per aggiornare il FOSUserBundle alla versione più recente, c'era alcuni problemi di sicurezza. Dai un'occhiata al blog di Symfony per maggiori informazioni: http://symfony.com/blog/security-release-fosuserbundle – F481

risposta

3

FOSUserBundle dovrebbe essere nativamente "riposante" nel senso che potrebbe seguire le raccomandazioni REST.

Tuttavia, non è progettato per funzionare in modo nativo con FOSRestBundle, il modo più semplice per farlo è quello di sovrascrivere UserController nel pacchetto e adattare le azioni.

Ad esempio, per consentire la registrazione di riposo, si può scrivere la seguente azione:

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