2013-04-07 30 views
6

Tôi mới bắt đầu sử dụng fosuserbundle, hôm nay tôi kích hoạt liên kết đăng ký xác nhận. Nó hoạt động tuyệt vời, nhưng nếu người dùng bấm vào một lần thứ hai vào liên kết xác nhận trong email, ông nhận được rằng lỗi:Lỗi vào fosuserbundle khi nhấp đúp vào liên kết xác nhận?

Người dùng có dấu hiệu xác nhận "3hiqollkisg0s4ck4w8g0gw4soc0wwoo8ko084o4ww4sss8o4" không tồn tại 404 Not Found - NotFoundHttpException

Tôi nghĩ rằng lỗi này nên được xử lý bởi các gói, không?

Cảm ơn

+0

Có vấn đề này cùng và tìm kiếm một giải pháp. Không có phạm vi cho người dùng câm người nhấp đúp vào tất cả mọi thứ !! – gezpage

+1

Nó phải được xử lý, nhưng nó không phải. Điều tương tự khi nhấp đúp vào đặt lại liên kết mật khẩu, sau khi khoảng thời gian yêu cầu mật khẩu hết hạn. Điều duy nhất mà làm việc cho tôi là 'ghi đè' định tuyến để fosuser: xác nhận hành động để nó tuyến đường đến hành động tôi đã viết. Phần ghi đè cơ bản của trình kiểm soát gói người dùng fos. Trong hành động của tôi, tôi kiểm tra hash xác nhận, nếu tồn tại tôi chuyển tiếp đến fosuserbundle: đăng ký: xác nhận. Nếu không - tôi lặp lại một số tin nhắn. Tôi có thể cung cấp một số mã sau. – tiriana

Trả lời

5

Đây là mã để ghi đè tác vụ. Về cơ bản chỉ cần sao chép một phần của hành động FOS thực tế và modded.

Tạo tệp RegistrationController.php trong thư mục bộ điều khiển của gói người dùng của bạn và đặt lớp RegistrationController ghi đè trong đó.

Giả bó người dùng của bạn là 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

Bạn cần đặt 'FOSUserBundle' thành phụ huynh trong gói ứng dụng của bạn, [xem tại đây] (http://symfony.com/doc/master/bundles/FOSUserBundle/overriding_controllers.html) – IROEGBU

Các vấn đề liên quan