双击确认链接时进入fosuserbundle的错误?

时间:2013-04-07 21:19:53

标签: fosuserbundle symfony-2.2

我刚开始使用fosuserbundle,今天我激活确认注册链接。 它工作得很好,但如果用户第二次点击电子邮件中的确认链接,他就会收到错误:

具有确认令牌“3hiqollkisg0s4ck4w8g0gw4soc0wwoo8ko084o4ww4sss8o4”的用户不存在 找不到404 - NotFoundHttpException

我认为这个错误应该由捆绑处理,不是吗?

由于

1 个答案:

答案 0 :(得分:5)

以下是覆盖操作的代码。基本上只是复制了部分实际的FOS动作并进行了修改。

在用户包的controller文件夹中创建一个RegistrationController.php文件,并将重写的RegistrationController类放在那里。

假设您的用户捆绑包是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);
        }
    }
}