Permalink
Browse files

Merge branch 'auth-logout' into 2.0

  • Loading branch information...
2 parents 9ea1a04 + 71933f5 commit 81a2563a056b040c705dd004e525fd6de1079f9d @markstory markstory committed Jul 3, 2011
@@ -99,6 +99,18 @@ protected function _findUser($username, $password) {
abstract public function authenticate(CakeRequest $request, CakeResponse $response);
/**
+ * Allows you to hook into AuthComponent::logout(),
+ * and implement specialized logout behaviour.
+ *
+ * All attached authentication objects will have this method
+ * called when a user logs out.
+ *
+ * @param array $user The user about to be logged out.
+ * @return void
+ */
+ public function logout($user) { }
+
+/**
* Get a user based on information in the request. Primarily used by stateless authentication
* systems like basic and digest auth.
*
@@ -108,4 +120,4 @@ protected function _findUser($username, $password) {
public function getUser($request) {
return false;
}
-}
+}
@@ -516,6 +516,9 @@ public function login($user = null) {
/**
* Logs a user out, and returns the login action to redirect to.
+ * Triggers the logout() method of all the authenticate objects, so they can perform
+ * custom logout logic. AuthComponent will remove the session data, so
+ * there is no need to do that in an authentication object.
*
* @param mixed $url Optional URL to redirect the user to after logout
* @return string AuthComponent::$loginAction
@@ -524,6 +527,13 @@ public function login($user = null) {
*/
public function logout() {
$this->__setDefaults();
+ if (empty($this->_authenticateObjects)) {
+ $this->constructAuthenticate();
+ }
+ $user = $this->user();
+ foreach ($this->_authenticateObjects as $auth) {
+ $auth->logout($user);
+ }
$this->Session->delete(self::$sessionKey);
$this->Session->delete('Auth.redirect');
return Router::normalize($this->logoutRedirect);
@@ -1061,6 +1061,17 @@ public function testLogout() {
$this->assertNull($this->Auth->Session->read('Auth.redirect'));
}
+ public function testLogoutTrigger() {
+ $this->getMock('BaseAuthenticate', array('authenticate', 'logout'), array(), 'LogoutTriggerMockAuthenticate', false);
+
+ $this->Auth->authenticate = array('LogoutTriggerMock');
+ $mock = $this->Auth->constructAuthenticate();
+ $mock[0]->expects($this->once())
+ ->method('logout');
+
+ $this->Auth->logout();
+ }
+
/**
* test mapActions loading and delegating to authorize objects.
*

0 comments on commit 81a2563

Please sign in to comment.