Перенаправление на исходную страницу после входа в систему (Codeigniter) - PullRequest
2 голосов
/ 24 декабря 2011

Весь сайт требует от пользователя входа в систему перед просмотром страницы.Если пользователь не вошел в систему, он будет перенаправлен на страницу входа / регистрации.

Проблема: Когда пользователь, который не вошел в систему, вводит URL-адрес, например http://www.domain.com/listings/1234, онбудет показана эта страница, но с затемненной страницей, которая не позволяет пользователю взаимодействовать со страницей (jQuery, здесь нет проблем) и всплывающим модальным окном со ссылкой на страницу входа (Tank Auth) http://www.domain.com/login.

После входа со страницы входа в систему пользователь будет перенаправлен обратно на обычную страницу, полученную после входа в систему, то есть: http://www.domain.com, но этой странице передается переменная 1234.

Короче говоря : я хочу, чтобы пользователь, который не вошел в систему и вошел на веб-сайт с http://www.domain.com/listings/1234 по НЕ , будет перенаправлен на http://www.domain.com/login пока , но вместо этого оставайтесь на http://www.domain.com/listings/1234 и ему будет показано модальное окно со ссылкой на страницу входа http://www.domain.com/login, где, если он войдет в систему, он будет перенаправлен обратно на http://www.domain.com/ вместо обычной страницы, которую он получает после входа в систему и будетпередал переменную 1234.

Как можно тего можно сделать с помощью Codeigniter?

Это то, что у меня сейчас есть:

контроллер списков

function index(listing_id) {
    $this->load->module('auth');
    if(!$this->auth->tank_auth->is_logged_in()) {
         redirect('login');
    } 

    // Some calls to database etc here...

    $this->load->view('listings', $data);

}

1 Ответ

2 голосов
/ 24 декабря 2011

Есть несколько способов ответить на ваш вопрос.Надеемся, что это решение даст некоторые идеи о том, как этого добиться.

В приведенном ниже решении используется диалоговое окно jquery ui для отображения модальных и jquery .ajax для обработки отправки формы входа в систему.

Условно поместите этот код внизу страницы.перед тегом </body>, если пользователь не вошел в систему.

<?php if($this->auth->tank_auth->is_logged_in()){ ?>
    <div id="dialog-wrap" class="modal" >
    <?php echo $this->load->view('login_form'); ?>
    </div>
    <script>
        $('#dialog-wrap').modal({
            modal: true,
            autoOpen: true,
        });

        $('#login-form').submit(function(){
            //use .ajax to submit login form and check credentials.
            $.ajax({
                type: 'POST',
                url: <?php echo base_url(); ?>"login.php",
                data: "username="+$('username').val()+'&password='+$('password').val(),
                dataType: 'json',
                success: function(returnData){.
                    if(returnData.status){
                        //close modal box
                    }else {
                        //display message that login failed.
                    }
                }
            });

        });
    </script>
?>

Ваш контроллер входа ajax

function login(){

  //Use tank auth to validate login information.

  if(authentication is successful) {
    $return_data = array(
        'status'    => true,
        'msg'           => 'Login Successful'
    );
  }else {
        $return_data = array(
        'status'    => false,
        'msg'           => 'Login failed'
    );
  } 

  //Use echo instead of return when you are sending data back to an jquery ajax function.
  echo json_encode($data);
}

Если вы сделаете это таким образом, вам не придется полагатьсяна перенаправлениях codeigniter все будет обрабатываться через ajax.

Надеюсь, это даст вам представление о том, как с этим справиться.

...