2015-02-05 1 views
0

시나리오를 AppController의 beforeFilter에 넣었습니다. 일부 세션 데이터가 설정되어 있는지 확인하는 세션 검사 메소드가 있습니다. 그렇지 않은 경우 사용자는 로그인 페이지로 리디렉션됩니다.케이크의 beforeFilter에서 requestAction을 사용하여 AJax 레이아웃 렌더링하기

이 아약스 호출이 만들어 그러나 때, 서버 측 작업을 호출 잘 작동은으로, beforeFilter 내 코드의 여기 있습니다 .. requestAction을 무시하는 것 같다

AppController beforeFilter

public function beforeFilter(){ 
    if($this->RequestHandler->isAjax()) { 
    echo $this->requestAction("https://stackoverflow.com/users/ajax_login", array('return')); 
    }else{ 
    $this->redirect('/login'); 
    } 
} 

ajax_login action

function ajax_login() { 
    $this->render('ajax_login', 'ajax'); 
} 

<script type="text/javascript"> 
window.location = '<?php echo 'http://'.$_SERVER['HTTP_HOST'].$html->url('/login').'"'; ?>'; 
</script>; 

ajax_login view 기본적으로이 아약스 레이아웃을 렌더링합니다. 그러나보기가 렌더링되지 않으므로 리디렉션이 작동하지 않습니다.

물론 ajax를 통해 호출되는 작업이 세션 만료로 인해 net::ERR_CONNECTION_RESET이라는 오류를 발생시키기 때문에 오류가 발생합니다.

답변

0

작동하는 대체 솔루션을 찾았습니다. 여기에 코드입니다 :

class AppController extends Controller { 
    var $components = array('Auth', 'RequestHandler'); 

    function beforeFilter() { 
     if($this->RequestHandler->isAjax()) { 
      if(!$this->Session->check('data')) { 
       header('Requires-Auth: 1'); // set header and make sure to exit 
       exit; 
      } 
     } 
    } 
} 

가 그럼 그냥 1로 설정되어있는 경우, 헤더를 확인 장소에서 JQuery와 (acaxComplete) 이벤트 리스너를 가지고 로그인 페이지로 리디렉션.

<script> 
    $(document).ready(function() { 
    $(document).ajaxComplete(function(event, request, settings){ 
     var requiresAuth; 
     try { requiresAuth = request.getResponseHeader('Requires-Auth') } 
     catch(e) {} 

     if (requiresAuth == 1) { 
      window.location = "<?php echo $this->Html->url(array('controller' => 'users', 'action' => 'login')); ?>"; 
      return false; 
     } 
    }); 
    }); 
</script> 

이 작동합니다. 그러나 나는 아직도 나의 첫 번째 해결책이 효과가 없었던 이유에 관심이있다. 모든 입력을 환영합니다 .. 환호

관련 문제