身份验证成功处理程序并在登录后重定向



我正在尝试在我的Symfony2应用程序中登录后实现重定向,以便在我的用户是否具有一个属性时进行重定向。我已经在我的项目的处理程序文件夹中创建了类 AuthenticationSuccessHandler.php:

   命名空间 Me\MyBundle\Handler;    使用 Symfony\Component\Security\Http\HttpUtils;    使用 Symfony\Component\HttpFoundation\RedirectResponse;    使用 Symfony\Component\HttpFoundation\Request;    使用 Symfony\Component\Security\Core\Authentication\Token\TokenInterface;    使用 Symfony\Component\Security\Http\Authentication\DefaultAuthenticationSuccessHandler;class AuthenticationSuccessHandler extensions DefaultAuthenticationSuccessHandler {        public function __construct( HttpUtils $httpUtils, array $options ) {            父项::__construct( $httpUtils, $options );        }        public function onAuthenticationSuccess( Request $request, TokenInterface $token ) {$user = $token->getUser();        if($user->getProfile()!=1){            $url = 'fos_user_profile_edit';        }else{            $url = 'My_route';        }        返回新的重定向响应($this->router->generate($url));        }    }

但是当我登录时,我收到一个错误:

注意:未定义的属性:Me\MyBundle\Handler\AuthenticationSuccessHandler::$router in/var/www/MyBundle/src/Me/MyBundle/Handler/AuthenticationSuccessHandler.php 第 28 行

错误发生在"返回新的重定向响应($this->router->generate($url));"

我也有我的服务:

   my_auth_success_handler:            class: Me\MyBundle\Handler\AuthenticationSuccessHandler            公开:假            参数: [ @security.http_utils, [] ]

和 security.yml 中的成功处理程序:

   fos_facebook:            success_handler:my_auth_success_handler

有什么想法吗?谢谢。

您没有注入@router服务。修改构造函数

protected $router;
public function __construct( HttpUtils $httpUtils, array $options, $router ) {
    $this->router = $router;
    parent::__construct( $httpUtils, $options );
}

和服务定义:

...
arguments: [ @security.http_utils, [], @router ]

使用 Symfony>= 2.8,您可以使用 AutowirePass,简化服务定义。

use SymfonyComponentRoutingRouter; 
use SymfonyComponentSecurityHttpHttpUtils;
class AuthenticationSuccessHandler extends DefaultAuthenticationSuccessHandler 
{
    /**
     * @var Router
     */
    protected $router;
    public function __construct(HttpUtils $httpUtils, array $options = [], Router $router) 
    {
        parent::__construct($httpUtils, $options);
        $this->router = $router;
    }

请注意,默认值"$options = []"对于AutowirePass很重要:否则,将引发异常。但是你有一个空数组。

进入服务.yml:

 my_auth_success_handler:
        class: MeMyBundleHandlerAuthenticationSuccessHandler
        public: false
        autowire: true

无需在此处指定参数;-)

相关内容

  • 没有找到相关文章

最新更新