Это решение, которое я использовал с tank_auth, возможно, оно не самое лучшее, но я обнаружил, что оно хорошо работает для меня.
В контроллере
if (!$this->tank_auth->is_logged_in()){
$encoded_uri = preg_replace('"/"', '_', $_SERVER['REQUEST_URI']);
redirect('/login/'.$encoded_uri);
}elseif($this->tank_auth->is_logged_in(FALSE)){ // logged in, not activated
redirect('/user/reactivate/');
}else{
//Logged IN Stuff Here
}
Модифицированная функция входа в систему авторизации танка (controllers / auth.php)
function login($return_to = "")
{
if ($this->form_validation->run()) {
if ($this->tank_auth->login(
$this->form_validation->set_value('login'),
$this->form_validation->set_value('password'),
$this->form_validation->set_value('remember'),
$data['login_by_username'],
$data['login_by_email'])) {
//...Other Stuff Here
$decoded_uri = preg_replace('"_"','/',$return_to);
redirect($decoded_uri);
}
}
}
Возможно, вам потребуется изменить preg_replace на что-то другое, если ваши URL-адреса имеют_ в них я просто использовал это, потому что это работает для меня
РЕДАКТИРОВАТЬ
Я обновил функцию, это один из другого проекта, в котором мы сильно изменили материал аутентификации танка, так что если все немного по-другому, извините
Что касается передачи материала encode_uri, я добавил следующее в файл rout.php (config / rout.php)
$route['auth/login/(:any)'] = 'auth/login/$1';
$route['auth/login'] = 'auth/login'; //Probably don't need this one now