1

进行身份验证后,我想执行一些操作。

我之前已经找到了如何执行操作:

$events->attach('ZfcUser\Authentication\Adapter\AdapterChain', 'authenticate.pre', function($e) use ($startup) { 
  //actions
});

但是认证后什么都没有,我错过了一个触发器,如何找到它?

感谢您的任何建议

4

3 回答 3

3

没有定义身份验证后触发器(至少在我使用的 ZfcUser 版本中)。您可以在 ZfcUser\Authentication\Adapter\AdapterChain\prepareForAuthentication() 找到现有的触发器

public function prepareForAuthentication(Request $request)
{
    $e = $this->getEvent()
              ->setRequest($request);

    //THE PRE-AUTHENTICATION YOU USE
    $this->getEventManager()->trigger('authenticate.pre', $e);

    //THIS ONE LAUNCHES THE AUTHENTICATION. LOOK AT:
    //ZfcUser\Authentication\Adapter\Db\authenticate()
    $result = $this->getEventManager()->trigger('authenticate', $e, function($test) {
        return ($test instanceof Response);
    });

    if ($result->stopped()) {
        if($result->last() instanceof Response) {
            return $result->last();
        } else {
            // throw new Exception('Auth event was stopped without a response.');
        }
    }

    if ($e->getIdentity()) {
        //THIS IS WHERE THE TRIGGER SHOULD BE PLACED
        return true;
    }

    return false;
}

您可以覆盖此类/方法并将触发器放在上面注释的位置。

于 2013-04-05T11:15:02.717 回答
2

好的,我不知道这是否是好方法,但它正在工作..

我刚刚将login_redirect_route更改为控制器操作以执行一些有用的操作,然后重定向到用户配置文件。

顺便说一下,触发器工作得很好@lluisaznar!

于 2013-04-08T14:05:12.380 回答
1

今天也和这个搏斗,写了一篇关于它的小文章,以防将来对任何人有帮助:

http://circlical.com/blog/2013/7/5/capturing-auth-events-with-zfcuser

于 2013-07-05T16:42:44.330 回答