2013-04-07 4 views
6

Właśnie zaczynam używać fosuserbundle, dziś aktywuję link rejestru potwierdzeń. Działa świetnie, ale jeśli użytkownik kliknij po raz drugi na link potwierdzający w mailu, on się tego błędu:Błąd w fosuserbundle po podwójnym kliknięciu linku potwierdzającego?

Użytkownik z potwierdzeniem tokena „3hiqollkisg0s4ck4w8g0gw4soc0wwoo8ko084o4ww4sss8o4” nie istnieje 404 Not Found - NotFoundHttpException

Myślę, że ten błąd powinien być obsługiwany przez pakiet, nie?

Dzięki

+0

Mając ten sam problem i szuka rozwiązania. Nie ma miejsca dla głupich użytkowników, którzy dwukrotnie klikną wszystko !! – gezpage

+1

Należy go obsługiwać, ale tak nie jest. To samo po dwukrotnym kliknięciu linka do ponownego wpisywania hasła, po wygaśnięciu interwału żądania hasła. Jedyną rzeczą, która zadziałała dla mnie, było "przesłonięcie" routingu do fosuser'a: potwierdź działanie, aby przejść do działania, które napisałem. Zasadniczo nadpisywanie części kontrolera pakietów użytkowników fos. W mojej akcji sprawdzam hash potwierdzenia, jeśli istnieje, przesyłaję dalej do fosuserbundle: rejestracja: potwierdź. Jeśli nie - echo komunikatu. Mogę dostarczyć trochę kodu później. – tiriana

Odpowiedz

5

Oto kod zastępujący działanie. Zasadniczo po prostu skopiowano część rzeczywistej akcji FOS i zmodowano.

Utwórz plik RegistrationController.php w folderze kontrolera pakietu użytkownika i umieść tam nadpisującą klasę RegistrationController.

Zakładając swój tobołek użytkownika jest 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

Musisz ustawić "FOSUserBundle" jako rodzica pakietu aplikacji, [patrz tutaj] (http://symfony.com/doc/master/bundles/FOSUserBundle/overriding_controllers.html) – IROEGBU