onAuthenticationSuccess是否会在Silex中的HTTP身份验证中被触发?

时间:2015-09-25 15:31:46

标签: php silex

我为我的应用程序设置了安全防火墙和SuccessHandler。相关的片段是:

$app -> register(new SecurityServiceProvider(), array(
    'security.firewalls' => array(
      'auth' => array(
        'pattern' => "^/auth",
        'http' => true,
        'users' => $app -> share(function() use ($app) {
            return new \Model\Manager\Account($app);
        })
      )
    'security.access_rules' => array(
      array('^/auth.*$', 'ROLE_USER')
    ),
));

$app['security.authentication.success_handler.auth'] = $app -> share(function() use ($app) {
  return new Handlers\Authentication\Auth\SuccessHandler($app['security.http_utils'], array(), $app);
});

' auth'得到了' http'身份验证设置为true,确实当我转到网址' http://myserver/auth'我收到了基本身份验证挑战。

然而,当我正确登录时,我得到了我想要的页面,但我还没有通过我设置的SuccessHandler。使用HTTP身份验证时或仅在使用基于表单的身份验证时是否支持此功能?

如果不支持,有没有办法可以实现同样的目的?我一直在关注EventSubscriber,但我不知道如何在Silex中连接它以听取相应的事件。

谢谢,拉塞尔

更新:

我的SuccessHandler有以下内容。

```

<?php

namespace Handlers\Authentication\Auth;

use Symfony\Component\Security\Core\Exception\AuthenticationException;
use Symfony\Component\Security\Http\Authentication\DefaultAuthenticationSuccessHandler;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Security\Http\HttpUtils;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\HttpKernel\HttpKernelInterface;
use Silex\Application;

class SuccessHandler extends DefaultAuthenticationSuccessHandler {

    protected $app = null;

    public function __construct(HttpUtils $httpUtils, array $options, Application $app) {

        parent::__construct($httpUtils, $options);
        $this -> app = $app;
    }

    public function onAuthenticationSuccess(Request $request, TokenInterface $token) {

        // get the user from the token
        $user = $token -> getUser();
dump($user);
exit;
        // redirect user to the page they requested
        return $this -> httpUtils -> createRedirectResponse($request, $this -> determineTargetUrl($request));

    }
}

```

正如您所看到的,我要做的就是显示用户详细信息,然后退出。我知道这不是我通常会做的,但我正在努力确保调用onAuthenticationSuccess,虽然身份验证正在运行,但它不会被调用。

0 个答案:

没有答案