在用户通过zfcuser进行身份验证后,我想执行一些操作。
我之前已经找到了如何执行操作:
$events->attach('ZfcUser\Authentication\Adapter\AdapterChain', 'authenticate.pre', function($e) use ($startup) {
//actions
});
但是认证后什么都没有,我错过了一个触发器,如何找到它?
感谢您的任何建议
在用户通过zfcuser进行身份验证后,我想执行一些操作。
我之前已经找到了如何执行操作:
$events->attach('ZfcUser\Authentication\Adapter\AdapterChain', 'authenticate.pre', function($e) use ($startup) {
//actions
});
但是认证后什么都没有,我错过了一个触发器,如何找到它?
感谢您的任何建议
没有定义身份验证后触发器(至少在我使用的 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;
}
您可以覆盖此类/方法并将触发器放在上面注释的位置。
好的,我不知道这是否是好方法,但它正在工作..
我刚刚将login_redirect_route更改为控制器操作以执行一些有用的操作,然后重定向到用户配置文件。
顺便说一下,触发器工作得很好@lluisaznar!
今天也和这个搏斗,写了一篇关于它的小文章,以防将来对任何人有帮助:
http://circlical.com/blog/2013/7/5/capturing-auth-events-with-zfcuser