2014-11-11 2 views
0

내 CakePHP 앱에서 사용자가 로그인하지 않은 경우 로그인 버튼이 있고 로그인되어있는 경우 로그 아웃 버튼이있는 모든 페이지에 로그인 양식을 포함하고자합니다.Cakephp Auth-> user() null

는 여기에 사용자가 로그인되어 있는지 확인하기 위해 모든 뷰에서 사용할 수있는 플래그를 설정할

var $components = array 
(
    'Auth' => array 
    (
     'authenticate' => array 
     (
      'Form' => array 
      (
       'fields' => array('username' => 'email'), 
       'passwordHasher' => array 
       (
        'className' => 'Simple', 
        'hashType' => 'sha256' 
       ) 
      ) 
     ) 
    ), 
    'Session' 
); 

AppController.php

내 인증 구성입니다. 내가의 AppController를 통해이 작업을 수행하기 위해 노력했다 :: beforeFiter()

function beforeFilter() 
{ 
    parent::beforeFilter(); 
    $this->layout = 'default'; 
    var_dump($this->Auth->user()); 
    $this->set("isLoggedIn",$this->Auth->loggedIn()); 
} 

모든 컨트롤러는 PagesController를 제외하고 작동합니다. 그냥 내가 내 홈 페이지하지만 위해서 var_dump ($에 갈 때 실제로 수행이 전화를받을 ::으로, beforeFilter

function beforeFilter() 
{ 
    parent::beforeFilter(); 
    $this->Auth->allow();  
} 

AppController가 ::으로, beforeFilter()는이 PagesController 인 문제를 허용/거부를하지 있는지 확인합니다 AppController :: beforeFilter()의 this-> Auth-> user())는 NULL을 출력합니다.

정적 페이지에는 사용자 인증을 사용할 수 없습니까?

답변

0

많은 디버깅 후에 문제가 발견되었습니다. 문제는 PagesController에 대괄호 앞뒤에 공백 문자가 추가 된 것입니다. 따라서 헤더가 이미 전송 된 것으로 간주되어 session_start()를 제대로 호출 할 수 없습니다. 다른 사람에게 이런 일이 발생하면 컨트롤러 또는 모델의 공백을 확인하십시오.

헤더가 전송되는 위치를 찾을 수없는 경우 매개 변수를 전달하는 headers_sent() 함수를 사용하여 헤더가 처음 전송 된 위치를 찾으십시오.

0

이 경우 컨트롤러, 모달 같은 PHP 파일에서 PHP 닫는 태그 (?>)를 생략 할 수 있습니다