我为我的应用程序设置了安全防火墙和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,虽然身份验证正在运行,但它不会被调用。