Default to loginRedirect, if set, on authError in AuthComponent

Implements 
Based on the patch written by @dereuromark
This commit is contained in:
Kyle Robinson Young 2012-03-27 22:51:47 -07:00
parent 0443fe1507
commit 319d154aee
2 changed files with 44 additions and 7 deletions
lib/Cake
Controller/Component
Test/Case/Controller/Component

View file

@ -332,7 +332,11 @@ class AuthComponent extends Component {
} }
$this->flash($this->authError); $this->flash($this->authError);
$controller->redirect($controller->referer('/'), null, true); $default = '/';
if (!empty($this->loginRedirect)) {
$default = $this->loginRedirect;
}
$controller->redirect($controller->referer($default), null, true);
return false; return false;
} }

View file

@ -804,8 +804,8 @@ class AuthComponentTest extends CakeTestCase {
$expected = Router::normalize('/admin'); $expected = Router::normalize('/admin');
$this->assertEquals($expected, $this->Auth->redirect()); $this->assertEquals($expected, $this->Auth->redirect());
//Ticket #4750 // Ticket #4750
//named params // Named Parameters
$this->Controller->request = $this->Auth->request; $this->Controller->request = $this->Auth->request;
$this->Auth->Session->delete('Auth'); $this->Auth->Session->delete('Auth');
$url = '/posts/index/year:2008/month:feb'; $url = '/posts/index/year:2008/month:feb';
@ -817,7 +817,7 @@ class AuthComponentTest extends CakeTestCase {
$expected = Router::normalize('posts/index/year:2008/month:feb'); $expected = Router::normalize('posts/index/year:2008/month:feb');
$this->assertEquals($expected, $this->Auth->Session->read('Auth.redirect')); $this->assertEquals($expected, $this->Auth->Session->read('Auth.redirect'));
//passed args // Passed Arguments
$this->Auth->Session->delete('Auth'); $this->Auth->Session->delete('Auth');
$url = '/posts/view/1'; $url = '/posts/view/1';
$this->Auth->request->addParams(Router::parse($url)); $this->Auth->request->addParams(Router::parse($url));
@ -848,7 +848,7 @@ class AuthComponentTest extends CakeTestCase {
$_GET = $_back; $_GET = $_back;
//external authed action // External Authed Action
$_SERVER['HTTP_REFERER'] = 'http://webmail.example.com/view/message'; $_SERVER['HTTP_REFERER'] = 'http://webmail.example.com/view/message';
$this->Auth->Session->delete('Auth'); $this->Auth->Session->delete('Auth');
$url = '/posts/edit/1'; $url = '/posts/edit/1';
@ -863,7 +863,7 @@ class AuthComponentTest extends CakeTestCase {
$expected = Router::normalize('/posts/edit/1'); $expected = Router::normalize('/posts/edit/1');
$this->assertEquals($expected, $this->Auth->Session->read('Auth.redirect')); $this->assertEquals($expected, $this->Auth->Session->read('Auth.redirect'));
//external direct login link // External Direct Login Link
$_SERVER['HTTP_REFERER'] = 'http://webmail.example.com/view/message'; $_SERVER['HTTP_REFERER'] = 'http://webmail.example.com/view/message';
$this->Auth->Session->delete('Auth'); $this->Auth->Session->delete('Auth');
$url = '/AuthTest/login'; $url = '/AuthTest/login';
@ -880,7 +880,40 @@ class AuthComponentTest extends CakeTestCase {
} }
/** /**
* test that no redirects or authorization tests occur on the loginAction * Default to loginRedirect, if set, on authError.
*
* @return void
*/
public function testDefaultToLoginRedirect() {
$_SERVER['HTTP_REFERER'] = false;
$_ENV['HTTP_REFERER'] = false;
putenv('HTTP_REFERER=');
$url = '/party/on';
$this->Auth->request = $CakeRequest = new CakeRequest($url);
$this->Auth->request->addParams(Router::parse($url));
$this->Auth->authorize = array('Controller');
$this->Auth->login(array('username' => 'mariano', 'password' => 'cake'));
$this->Auth->loginRedirect = array(
'controller' => 'something', 'action' => 'else',
);
$CakeResponse = new CakeResponse();
$Controller = $this->getMock(
'Controller',
array('on', 'redirect'),
array($CakeRequest, $CakeResponse)
);
$expected = Router::url($this->Auth->loginRedirect, true);
$Controller->expects($this->once())
->method('redirect')
->with($this->equalTo($expected));
$this->Auth->startup($Controller);
}
/**
* Test that no redirects or authorization tests occur on the loginAction
* *
* @return void * @return void
*/ */