2012-07-27 2 views
0

내 응용 프로그램에서 나는 응용 프로그램 작업의 시작 부분에 "자동 로그인"논리를 사용해야합니다. 이 "자동 로그인"기능에서는 많은 작업을 수행하며, 그 중 하나 인 CookieComponent를 사용하여 쿠키를 설정합니다.CakePHP 디스패처 필터에 쿠키를 설정하는 방법은 무엇입니까?

이 autoLogin을 컨트롤러 또는 구성 요소에 사용하면 디스패처 필터에서 동일한 작업을 수행 할 때 BUT 쿠키가 설정되지 않습니다.

CakePHP 코드를 자세히 살펴보면 디스패처 필터에서 쿠키를 설정하려고 시도하면 $_cookies 속성이 CakeResponse으로 비어 있음을 알게되었습니다. 마치 디스패처 필터가 자신의 CakeResponse을 생성하고 나중에 재설정되므로 쿠키가 설정되지 않은 것처럼 보입니다.

나는 또한이 방법으로 beforeDispatch 방법에 직접 쿠키를 설정 시도
class UserLoadFilter extends DispatcherFilter 
{ 
    public $priority = 8;  
    public function beforeDispatch($event) { 
     App::uses('AuthComponent', 'Controller/Component'); 
     if (!AuthComponent::user()) { 
      App::uses('CustomAuthComponent', 'Controller/Component'); 
      //$controller = new AppController($event->data['request'], $event->data['response']); 
      $auth = new CustomAuthComponent(new ComponentCollection(), Configure::read('Auth')); 
      $auth->autoLogin(); 
     } 
    } 
} 

:

App::uses('CookieComponent', 'Controller/Component'); 
$cookie = new CookieComponent(new ComponentCollection()); 
$cookie->write('test', 'TEST!', false, "1 day"); 

을하지만,이 역시 아무 의미가 없습니다

내 필터는 다음과 같습니다.

내가 뭘 잘못 했니? 어쩌면 나는 단순한 것들을 보지 못했을 지 모르지만 나는 많은 시간을 보냈지 만 여전히 이것을 고칠 수는 없습니다. 이 곳에서 쿠키를 만들 수 있습니까?

확실히 setcookie를 사용하거나 자체 쿠키 래퍼를 작성할 수는 있지만 쿠키 구성 요소를 사용하여 CakePHP 스타일로 만들고 싶습니다.

답변

1

이것은 나에게 잘못되었습니다. 2.x는 인증 및 권한 부여 객체를 사용하므로 구성 요소 부분을 의미하는 CustomAuthComponent는 필요하지 않습니다. 대신 맞춤 설정 한 authentication and authorization objects을 만듭니다.

beforeDispatcher()에서이 작업을 수행해야하는 이유가 없습니다. 그럼 목표는 정확히 무엇입니까? 어떤 종류의 인증을 구현하려고합니까? 귀하의 의견에 따라

편집 : 당신은 보리스 말했듯이 사용자를 확인하고 로케일이 설정됩니다 후 (당신이 바로 그것을 한 경우)

단순히 리디렉션합니다. 따라서 beforeFilter()의 쿠키에서 uuid를 읽은 다음이를 기반으로 사용자 레코드를 얻고 사용자 레코드를 사용하여 "수동"로그인을 한 다음 리디렉션하십시오.

AuthComponent에서 수정 한 항목은 무엇입니까?

+0

쿠키에서 사용자 UUID 값을 사용하여 사용자 데이터를 복원하고 자동으로 로그인하려고합니다 (단, 사용자가 UUID 값을 가진 쿠키가없는 경우 새 사용자 엔티티를 만들고이 사용자에 대해 쿠키로 사용자 UUID를 설정 함) . 따라서 사용자가 monthes 후에 웹 사이트로 돌아 가면 그는 로그인하여 자신의 지역으로 리디렉션됩니다. 그리고 나는 beforeDispatcher()에서 그것을하기를 원합니다. 왜냐하면 라우팅이 시작되기 전에 사용자 로케일을 알고 싶기 때문입니다. 그리고 사용자 지정 인증 개체에 대해서 - 나는 이것을 사용하지만 Auth 구성 요소에서도 약간의 변경이 필요하므로 CustomAuthComponent에서이를 확장합니다. – Vovkin

+1

@Vovkin 사용자가 인식하고 로그인 한 후에 올바른 로케일로 리디렉션 할 수 있습니다. 이렇게하면 beforeDispatch()에서이를 수행 할 필요가 없습니다. –