2013-04-07 2 views
6

Ho appena iniziato a usare fosuserbundle, oggi attivo il link del registro di conferma. E le grandi opere, ma se l'utente clicca una seconda volta sul link di conferma nell'e-mail, si ottiene questo errore:Bug in fosuserbundle quando si fa doppio clic sul link di conferma?

L'utente con token di conferma "3hiqollkisg0s4ck4w8g0gw4soc0wwoo8ko084o4ww4sss8o4" non esiste 404 Not Found - NotFoundHttpException

Penso che questo errore dovrebbe essere gestito dal pacchetto, no?

Grazie

+0

Avendo questo stesso problema e alla ricerca di una soluzione. Non c'è spazio per gli utenti stupidi che fanno doppio clic su tutto !! – gezpage

+1

Dovrebbe essere gestibile, ma non lo è. La stessa cosa quando si esegue il doppio clic sul link pasword, dopo che l'intervallo di richiesta della password scade. L'unica cosa che ha funzionato per me è quella di "scavalcare" il routing su fosuser: conferma l'azione in modo da indirizzare all'azione che ho scritto. Parte che sovrascrive in modo fondamentale il controllore del bundle utente di fos. Nella mia azione controllo l'hash di conferma, se esiste, inoltro a fosuserbundle: registrazione: conferma. In caso contrario - I eco un messaggio. Posso fornire un codice più tardi. – tiriana

risposta

5

Ecco il codice per l'override l'azione. Fondamentalmente ho appena copiato parte dell'azione FOS e modificato.

Creare un file RegistrationController.php nella cartella del controller del pacchetto utente e inserire la classe OverController di override.

Assumendo che il fascio utente è Acme \ UserBundle:

<?php 

// Acme\UserBundle\RegistrationController.php 

namespace Acme\UserBundle\Controller; 

use Symfony\Component\HttpFoundation\RedirectResponse; 
use FOS\UserBundle\Controller\RegistrationController as BaseController; 
use Symfony\Component\HttpFoundation\Request; 
use Symfony\Component\HttpFoundation\Response; 

class RegistrationController extends BaseController 
{ 
    /** 
    * Receive the confirmation token from user email provider, login the user 
    */ 
    public function confirmAction(Request $request, $token) 
    { 
     $userManager = $this->container->get('fos_user.user_manager'); 

     $user = $userManager->findUserByConfirmationToken($token); 

     if (null === $user) { 

      /* ************************************ 
      * 
      * User with token not found. Do whatever you want here 
      * 
      * e.g. redirect to login: 
      * 
      * return new RedirectResponse($this->container->get('router')->generate('fos_user_security_login')); 
      * 
      **************************************/ 

     } 
     else{ 
      // Token found. Letting the FOSUserBundle's action handle the confirmation 
      return parent::confirmAction($request, $token); 
     } 
    } 
} 
+0

È necessario rendere 'FOSUserBundle' un genitore del pacchetto dell'applicazione, [vedere qui] (http://symfony.com/doc/master/bundles/FOSUserBundle/overriding_controllers.html) – IROEGBU