CakePHP:如何向Auth :: login()或Auth :: logout()添加回调

时间:2014-01-07 21:53:38

标签: php cakephp authentication

我正在运行CakePHP v2.4,文档显示了几个用于控制内置Auth组件行为的自定义选项。但是,我没有看到有关在login()或logout()之后添加回调的任何信息。

我需要与这些操作一起运行其他一些例程,并且对于该代码而言,使用集中式回调而不是在调用login()或logout()的每个地方重写它都会更加干扰。

2 个答案:

答案 0 :(得分:3)

按照@Eisa Adil的建议扩展AuthComponent很好,但我建议使用Event。您将添加App::uses('CakeEventManager', 'Event');,您的扩展登录方法可能如下所示:

function login($user = null) { 
    CakeEventManager::instance()->dispatch(new CakeEvent('Auth.beforeLogin', $this, array('user' => $user)));
    $loggedIn = parent::login($user);
    CakeEventManager::instance()->dispatch(new CakeEvent('Auth.afterLogin', $this, array('user' => $user)));

    return $loggedIn; 
}

您可以在custom event listener中定义回调,这样您就可以在控制器外部拥有许多听众(插件很方便),甚至可以在某些情况下决定停止活动。

答案 1 :(得分:0)

class UsersController extends AppController {

function afterLogin($successfully){ 
        if($successfully == true){ 
            // do something if logged successfully 
        }else{ 
            // do something if not 
        } 
    } 

}

Read more.