代码之家  ›  专栏  ›  技术社区  ›  Whatever

如何使用Silex框架实现自定义身份验证成功处理程序?

  •  3
  • Whatever  · 技术社区  · 10 年前

    我想在用户登录时跟踪一些数据(成功和失败),但我真的不知道该怎么做。

    防火墙如下所示:

    $app->register(new Silex\Provider\SecurityServiceProvider(), array(
        'security.firewalls' => array(
            'secured' => array(
                'pattern' => '^/',
                'anonymous' => true,
                'logout' => true,
                'form' => array('login_path' => '/login',
                                'check_path' => '/login_check',
                                ),
                'users' => $app->share(function () use ($app) {
                    return $app["dao.identifiant"];
                }),
            ),
        ),
    ));
    

    我发现我必须注册一项服务,如:

    $app['security.authentication.success_handler.secured'] = $app->share(function ($app) {
        ...
    });
    

    我还创建了一个自定义类,实现 AuthenticationSuccessHandler接口 :

    <?php
    
    namespace myproject\Authentication;
    
    use Symfony\Component\Security\Http\Authentication\AuthenticationSuccessHandlerInterface;
    use Symfony\Component\HttpFoundation\Request;
    use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
    
    class CustomAuthenticationSuccessHandler implements AuthenticationSuccessHandlerInterface
    {
    
        public function onAuthenticationSuccess(Request $request, TokenInterface $token)
        {
           ...
        }
    }
    

    我有一个班叫 联系 其中我有一个功能,可以在我的数据库中记录一些信息(如用户ID、连接的日期和时间,如果他登录失败或成功等)。当用户尝试登录时,我如何管理调用此函数?

    谢谢

    1 回复  |  直到 10 年前
        1
  •  4
  •   Max P.    10 年前

    添加身份验证成功处理程序

    namespace Your\Namespace;
    
    use Symfony\Component\Security\Http\Authentication\DefaultAuthenticationSuccessHandler as BaseDefaultAuthenticationSuccessHandler;
    use Symfony\Component\HttpFoundation\Request;
    use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
    
    class DefaultAuthenticationSuccessHandler extends BaseDefaultAuthenticationSuccessHandler
    {
        public function onAuthenticationSuccess(Request $request, TokenInterface $token)
        {
            // your actions
    
            return parent::onAuthenticationSuccess($request, $token);
        }
    }
    

    添加身份验证失败处理程序

    namespace Your\Namespace;
    
    use Symfony\Component\Security\Http\Authentication\DefaultAuthenticationFailureHandler as BaseDefaultAuthenticationFailureHandler;
    use Symfony\Component\HttpFoundation\Request;
    use Symfony\Component\Security\Core\Exception\AuthenticationException;
    
    class DefaultAuthenticationFailureHandler extends BaseDefaultAuthenticationFailureHandler
    {
        public function onAuthenticationFailure(Request $request, AuthenticationException $exception)
        {
            // your actions
    
            return parent::onAuthenticationFailure($request, $exception);
        }
    }
    

    并在申请中注册

    $app['security.authentication.success_handler.secured'] = $app->share(function () use ($app) {
        $handler = new \Your\Namespace\DefaultAuthenticationSuccessHandler(
            $app['security.http_utils'],
            $app['security.firewalls']['secured']['form']
        );
        $handler->setProviderKey('secured');
    
        return $handler;
    });
    
    $app['security.authentication.failure_handler.secured'] = $app->share(function () use ($app) {
        return new \Your\Namespace\DefaultAuthenticationFailureHandler(
            $app,
            $app['security.http_utils'],
            $app['security.firewalls']['secured']['form'],
            $app['logger']
        );
    });
    
    推荐文章