2012-09-13 3 views
1

Zend_Auth 기능에 문제가 있습니다.로그인 실패로 Zend 세션이 지워짐

Zend_Auth 세션의 키가 만료 될 때 사용자에게 로그인 상자를 요구하는 웹 앱이 있습니다. 사용자가 올바른 자격 증명으로 로그인하면 세션의 키가 다시 true로 재설정됩니다. 그러나 사용자가 잘못된 자격 증명을 입력하면 세션의 모든 키가 지워지고 세션이 더 이상 유효합니까?

Zend_Auth::getInstance() 기능을 새로 시작하기 위해 닦으면 궁금합니다.

아이디어가 있으십니까? 난 당신이 _forward() 또는 _redirect() (새로운 요청) (요청을 보존)에 필요한 무엇을 말할 수부터 _process 방법 link

+0

_process() 함수에서 false를 반환하거나 _process()가 FALSE를 반환하면 로그인 컨트롤러가 수행하는 작업 때문에 인증에 실패하면 authAdapter가 수행하는 작업은 무엇입니까? – RockyFord

+0

빠른 답장을 보내 주셔서 감사합니다. _process 메서드를 호출하는 함수는 다음과 같습니다. [link] (http://paste.laravel.com/5wQ) 감사 이벤트를 기록하고 json 사용자에게 오류 메시지를 보내는 메시지. – Perceptive

답변

0

를 호출하는 인증 기능에

protected function _process($values) 
{ 
    // grab data from config 
    $iniTime = Zend_Registry::get('config')->inactive->session; 
    $expireTime = $iniTime->timeout; 
    $realIP = new Application_Model_RealIP(); 
    // Get our authentication adapter and check credentials 
    $adapter = $this->_getAuthAdapter(); 
    $adapter->setIdentity($values['email']); 
    //$pwEncode->encode_password($values['password']) 
    $adapter->setCredential($values['password']); 
    $auth = Zend_Auth::getInstance(); 
    $result = $auth->authenticate($adapter); 
    if ($result->isValid()) { 
     $user = $adapter->getResultRowObject(); 
     $user->session_IP = $realIP->getRealIpAddr(); 
     $auth->getStorage()->write($user); 
     //check whether the client is authenticated 
     $session = new Zend_Session_Namespace('new_session'); 
     // Set "dummy" key with expiration 
     $session->key = true; 
     $session->setExpirationSeconds($expireTime, 'key'); 
     return true; 
    } 
    return false; 
} 

링크 다시 로그인에 _process() 또는 authAction()의 60 ~ 100 행 사이에서 실패한 결과로 인해 발생합니다.

내가 읽은 것에서는 실패한 로그인이 기록되고 db가 업데이트되었지만 아무것도 표시되지 않은 것처럼 보입니다. 리다이렉트도 아니고 포워딩도없고 단지 헤더가 500으로 설정되고 메시지가 생성됩니다.

희망이 도움이됩니다. 나는 그것을 완전히 그리워하지 않았 으면 좋겠다.

+0

오 _redirect를 사용할 때 새로운 세션은 _forward()로만 표시됩니다. – Perceptive

관련 문제