Весь веб-сайт требует, чтобы пользователь заходил на сайт перед просмотром страницы. Если пользователь не вошел в систему, он перенаправляется на страницу входа / регистрации.
Проблема. Когда пользователь, не зарегистрированный в типах в 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); }
в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); }
Есть несколько способов, которыми ваш вопрос может быть достигнут. Надеемся, что это решение даст некоторые идеи о том, как это сделать.
В приведенном ниже решении используется диалог 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.
Надеюсь, это даст вам представление о том, как справиться с этим.