2014-11-16 8 views
0

"내 계정 정보 기억"쿠키 기반 로그인 시스템을 만들었으며 ZfcUser 및 BjyAuthorize와 함께 ZF2를 사용하고 있습니다. 글쎄, 로그인 한 후 캐시가 만료되면 BjyAuthorize가 "내 계정 정보 기억"시스템 전에 트리거되어 사용자가 로그인 한 것으로 인식되지 않습니다.BjyAuthorize 전에 코드 실행

여기가 내 AbstractController의 "Remember Me"쿠키 시스템입니다. : https://gist.github.com/Gamempire/2b6b6388cedca9491d5f#file-abstractcontroller-php-L18 (모든 컨트롤러가 내 AbstractController를 확장 함)

BjyAuthorize 전에 어떻게 호출하면 BjyAuthorize가 누군가가 로그인했는지 알 수 있습니까?

감사

답변

1

이 제대로 난 그냥 ZfcUser 기능을 추가하고 사용자의 ID를 얻기 위해 storageChain를 사용하는 것이 더 좋을 것 bjyAuthorize 전에 자신을 주입하려고하지 않을 수행합니다.

은 당신이 ZfcUser을 복사 할 수 basicly 자신의 공장을 만들고 너무와

public function createService(ServiceLocatorInterface $serviceLocator) 
{ 
    $storageChain = new \Zend\Authentication\Storage\Chain(); 

    // dummy storage interface 
    $nonPersistent = new \Zend\Authentication\Storage\NonPersistent(); // replace this with your own storage interface. 
    $nonPersistent->write(1); // just to test 

    /* @var $authStorage Storage\StorageInterface */ 
    $authStorage = $serviceLocator->get('ZfcUser\Authentication\Storage\Db'); 

    $storageChain->add($authStorage, 10); // Check this interface first. 
    $storageChain->add($nonPersistent, 0); // Check this interface Second. 

    /* @var $authAdapter Adapter\AdapterInterface */ 
    $authAdapter = $serviceLocator->get('ZfcUser\Authentication\Adapter\AdapterChain'); 

    return new AuthenticationService(
     $storageChain, 
     $authAdapter 
    ); 
} 

을 변경하기 위해 필요한이 후 ZfcUser

'service_manager' => array(
    'factories' => array(
     'zfcuser_auth_service' => 'myNamespace\Factory\AuthenticationServiceFactory', 
    ), 
), 

의 서비스 이름을 재정 의하여이 시작을 할 수 $this->zfcUserAuthentication()->getIdentity()을 수행하는 예제 코드는 세션에 로그인 한 사용자가 없을 때 1을 반환합니다.

이 후 자신 만의 저장소 인터페이스를 만들어야합니다. Zend \ Authentication \ Storage \ StorageInterface를 구현합니다. 나는 당신의 쿠키 구현이 어떻게되는지 알지 못한다. 그리고 당신은 이것을 적응시켜야 할 것이다. 또한 쿠키를 사용할시기와하지 않을 때를 구현해야합니다. GoalioRememberMe이라는 기억 기능을 구현하는 zfcuser 용 모듈도 있습니다. 나는 이것이 당신을 돕기를 바랍니다.

+0

고맙습니다. @Otto Sandström, 나는 그것을 시도 할 것입니다! –

+0

이렇게하는 것이 좋지 않습니까? https://gist.github.com/Gamempire/cdb8bc1a97a29bbd7b7e (UserService는 쿠키를 확인하는 맞춤 서비스입니다) –

+0

storageChain의 우선 순위가 뒤 바뀌 었습니다! authStorage는 우선 순위가 더 높은 번호 여야합니다. –