2

注册后,我确保用户按如下方式登录:

$token = new UsernamePasswordToken($user, null, 'secured_area', $user->getRoles());
$this->get('security.context')->setToken($token);

并希望这也会触发我的成功处理程序:

$this->get('event_dispatcher')->dispatch(
    AuthenticationEvents::AUTHENTICATION_SUCCESS,
    new AuthenticationEvent($token)
);

处理程序在安全配置中的标准表单登录上设置,例如

firewalls:
    secured_area:
        form_login:
            success_handler: authentication_handler

成功处理程序在登录时触发,但在注册后不会触发。

这只是一个配置问题吗?和/或所有这些都可以通过一个事件来实现吗?

4

1 回答 1

0

我认为您必须对用户进行身份验证才能触发事件:

$token = $this->get('my.bundle.authentication.manager')->authenticate(new UsernamePasswordToken($user, null, 'secured_area', $user->getRoles()));
$this->get('security.context')->setToken($token);

my.bundle.authentication.manager将是 的别名security.authentication.manager,它可以像这样注册(XML):

<service id="my.bundle.authentication.manager" alias="security.authentication.manager" />
于 2013-01-22T02:24:35.550 回答