codeigniter: как перенаправить после входа в систему текущего контроллера (php_self в регулярном php)

Хорошо это не действительно проблема, но я проверяю, существует ли пользователь и регистрирует их в и перенаправление к site/members_area, но я не хочу отправлять пользователя в определенную страницу, но я хочу перезагрузить текущий контроллер. Таким образом, если бы я вхожу в систему в индексе/доме, я хотел бы быть перенаправленным в индексе/доме, как я должен продолжить двигаться?

в регулярном php я вставил бы действие для перенаправления к текущей странице

<?php echo $_SERVER['PHP_SELF']; ?>

Это - код в платформе

function validate_credentials()
    {       
        $this->load->model('membership_model');
        $query = $this->membership_model->validate();

        if($query) // if the user's credentials validated...
        {
            $data = array(
                'username' => $this->input->post('username'),
                'is_logged_in' => true
            );
            $this->session->set_userdata($data);
            redirect('site/members_area'); //<-- this line here should be dynamic
        }
        else // incorrect username or password
        {
            $this->index();
        }
    }
9
задан Christophe 16 April 2010 в 12:36
поделиться

3 ответа

Я сам решил эту проблему, разместив в заголовке форму входа, которая всегда отправляется одному контроллеру входа, но загвоздка в том, что форма входа в заголовок (которая появляется на каждой странице) всегда имеет скрытый ввод, называемый перенаправлением, который фиксирует фактический контроллер входа в систему ...

Вот базовая настройка (убедитесь, что вспомогательный 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");
}

Здесь происходит следующее:

  1. Пользователь входит в систему на другой странице.
  2. Форма входа в систему отправляется единственному контроллеру входа со скрытым элементом ввода, указывающим, откуда они входят в систему.
  3. Контроллер входа в систему обрабатывает вход в систему, а затем выполняет перенаправление на основе ввода.
  4. При неудачном входе в систему перенаправление снова устанавливается, поэтому, несмотря ни на что, пользователь вернется на исходную страницу.

Это просто базовый пример. Очевидно, вы можете настроить его по мере необходимости.

15
ответ дан 4 December 2019 в 08:00
поделиться

Вы можете сделать это вот так. Не забудьте загрузить библиотеку сеанса и помощник по URL.

$this->session->set_flashdata('redirectToCurrent', current_url());

Передайте указанные выше флэш-данные вместе с логином и перенаправлением, используя:

redirect($this->session->flashdata('redirectToCurrent'));
10
ответ дан 4 December 2019 в 08:00
поделиться

Я уверен, что есть способ получше, но я это делаю, когда не удается проверить, вошел ли пользователь в систему, я использую $ this-> session-> set_flashdata ('redirect_url', current_url ()); , а затем передать его вместе с формой входа, чтобы я знал, куда перенаправить пользователя обратно.

Как я уже сказал, я уверен, что есть более чистый способ сделать это, но мне определенно не нравится $ _ SERVER ['HTTP_REFERER']; , поскольку ему нельзя доверять.

2
ответ дан 4 December 2019 в 08:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: