내 응용 프로그램에서 나는 응용 프로그램 작업의 시작 부분에 "자동 로그인"논리를 사용해야합니다. 이 "자동 로그인"기능에서는 많은 작업을 수행하며, 그 중 하나 인 CookieComponent를 사용하여 쿠키를 설정합니다.CakePHP 디스패처 필터에 쿠키를 설정하는 방법은 무엇입니까?
이 autoLogin을 컨트롤러 또는 구성 요소에 사용하면 디스패처 필터에서 동일한 작업을 수행 할 때 BUT 쿠키가 설정되지 않습니다.
CakePHP 코드를 자세히 살펴보면 디스패처 필터에서 쿠키를 설정하려고 시도하면 $_cookies
속성이 CakeResponse
으로 비어 있음을 알게되었습니다. 마치 디스패처 필터가 자신의 CakeResponse
을 생성하고 나중에 재설정되므로 쿠키가 설정되지 않은 것처럼 보입니다.
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 스타일로 만들고 싶습니다.
쿠키에서 사용자 UUID 값을 사용하여 사용자 데이터를 복원하고 자동으로 로그인하려고합니다 (단, 사용자가 UUID 값을 가진 쿠키가없는 경우 새 사용자 엔티티를 만들고이 사용자에 대해 쿠키로 사용자 UUID를 설정 함) . 따라서 사용자가 monthes 후에 웹 사이트로 돌아 가면 그는 로그인하여 자신의 지역으로 리디렉션됩니다. 그리고 나는 beforeDispatcher()에서 그것을하기를 원합니다. 왜냐하면 라우팅이 시작되기 전에 사용자 로케일을 알고 싶기 때문입니다. 그리고 사용자 지정 인증 개체에 대해서 - 나는 이것을 사용하지만 Auth 구성 요소에서도 약간의 변경이 필요하므로 CustomAuthComponent에서이를 확장합니다. – Vovkin
@Vovkin 사용자가 인식하고 로그인 한 후에 올바른 로케일로 리디렉션 할 수 있습니다. 이렇게하면 beforeDispatch()에서이를 수행 할 필요가 없습니다. –