2011-12-24 3 views
2

페이지를보기 전에 전체 웹 사이트에 로그인해야합니다. 사용자가 로그인하지 않은 경우 로그인/등록 페이지로 리디렉션됩니다.로그인 후 원래 페이지로 리디렉션 (Codeigniter)

문제 : http://www.domain.com/listings/1234 같은 URL에있는 유형에 로그인하지 않은 사용자, 그는하지만 페이지와 상호 작용에서 사용자를 방지하는 어두운 페이지와 해당 페이지를 표시됩니다 (jQuery를 물건이 아닌 문제) 및 (탱크 인증) 로그인 페이지 http://www.domain.com/login에 대한 링크가있는 팝업 모달 상자가 있습니다.

로그인 페이지에서 로그인 한 후 사용자는 로그인 후 일반적인 페이지 (예 : http://www.domain.com)로 리디렉션되지만 그 페이지에는 변수 1234이 전달됩니다. 짧은에서

: 나는 로그인하지 않았으며 아직 http://www.domain.com/login로 리디렉션 하지http://www.domain.com/listings/1234에서 웹 사이트를 입력했다, 대신 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); 

} 

답변

2

. 바라건대이 솔루션은 이것을 달성하는 방법에 대한 몇 가지 아이디어를 제공합니다.

아래 해결책은 jquery UI 대화 상자를 사용하여 모달을 표시하고 .ajax jquery를 사용하여 로그인 양식 제출을 처리합니다. 사용자가 로그인하지 않은 경우

조건부는 </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> 
?> 

귀하의 아약스 로그인 컨트롤러 당신이이 방법을

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 리다이렉트에 의존 할 필요가 없으며 모든 것은 아약스를 통해 처리 될 것입니다.

이 문제를 해결하는 방법을 알려 주시기 바랍니다.

+0

이 코드는 원래 게시물에 표시된 코드 스 니펫과 동일하게 작동합니까? 더 구체적인 세부 정보로 원본 게시물을 업데이트했습니다. 감사! – Nyxynyx