Я решил эту проблему сам, имея форму входа в систему в заголовке, которая всегда отправляется на один контроллер входа, но суть в том, что форма входа в систему в заголовке (которая появляется на каждой странице) всегда имеет скрытый ввод, называемый redirect, который фактически контроллер входа захватывает ...
Вот базовая настройка (убедитесь, что помощник URL загружен):
Форма входа в заголовок
<form action="/login" method="post">
<input type="hidden" name="redirect" value="<?php echo current_url(); ?>" />
<input type="text" name="username" value="" />
<input type="password" name="password" value="" />
<input type="submit" name="login" value="Login" id="submit">
</form>
Форма контроллера входа в систему
<form id="login" action="" method="post">
<input type="text" name="username" id="username" value="" />
<input type="password" name="password" id="password" value=""/>
<?php if(isset($_POST['redirect'])) : ?>
<input type="hidden" name="redirect" value="<?php echo $_POST['redirect']; ?>" />
<?php endif; ?>
<input type="submit" name="login" id="submit" value="Login" />
</form>
Самое приятное то, что вы продолжаете устанавливать перенаправление при сбое, а вход перенаправления устанавливается только в том случае, если вы входите откуда-то еще.
Контроллер
function index()
{
if( ! $this->form_validation->run())
{
// do your error handling thing
}
else
{
// log the user in, then redirect accordingly
$this->_redirect();
}
}
function _redirect()
{
// Is there a redirect to handle?
if( ! isset($_POST['redirect']))
{
redirect("site/members_area", "location");
return;
}
// Basic check to make sure we aren't redirecting to the login page
// current_url would be your login controller
if($_POST['redirect'] === current_url())
{
redirect("site/members_area", "location");
return;
}
redirect($_POST['redirect'], "location");
}
Что здесь происходит, это:
- Вход пользователя на другую страницу.
- Форма входа отправляется на один контроллер входа со скрытым элементом ввода, в котором указывается, откуда они входят.
- Контроллер входа обрабатывает вход в систему, а затем перенаправляет на основе ввода.
- При неудачном входе в систему перенаправление снова устанавливается, поэтому, несмотря ни на что, пользователь вернется на исходную страницу.
Это просто базовый пример. Очевидно, вы можете настроить его по мере необходимости.