Redirecting to requested URL in CakePHP with custom auth controller
I recently ran into the problem of having to redirect a user back to their requested url after logging in. In CakePHP you would normally use Auth::redirect() and that handles it for you. However, I had already written a custom authentication function in my app_controller. I simply wanted to figure out which url the user had requested, save that in the session, and send them back there after a successful login. This may seem like a very simple thing to do, but getting your current URL isn’t so easy in CakePHP.
The best solution I found was to use Router::getParams(). This will return you an array of info about the request. The currently request url, relative to you CakePHP install, will be in will be in [‘url’][‘url’]. The URL does not have a starting slash, unless the requested page was ‘/’. For example if you have CakePHP installed in http://www.mysite.com/cake_test/ and you request http:/www.mysite.com/cake_test/users/edit/15 the URL will be ‘users/edit/15’. So to add this into my auth controller I simply added:
$request_params = Router::getParams();
$this->Session->write('auth_redirect','/'.$request_params['url']['url']);
Then after a successful login you can simply:
$this->redirect($this->Session->read('auth_redirect'));