2013-02-13 5 views
0

이 문제가 발생했습니다. 로그인 자격 증명이 내 zend 응용 프로그램에서 인증되면 계정 확인 여부도 확인하고 싶습니다. Confirmed는 내 계정 테이블의 부울 열이며 기본적으로 False로 설정됩니다. 다음 코드를 통해이를 달성하려고합니다. 그러나 작동하지 않습니다.계정 확인을 위해 Zend에서 인증이 실패합니다.

$db = Zend_Db_Table::getDefaultAdapter(); 
    $authAdapter = new Zend_Auth_Adapter_DbTable($db); 
    $authAdapter->setTableName('Account'); 
    $authAdapter->setIdentityColumn('Email'); 
    $authAdapter->setCredentialColumn('Password'); 
    $authAdapter->setCredentialTreatment('Confirmed = 1'); 
    $authAdapter->setIdentity($data['email']); 
    $authAdapter->setCredential($data['password']); 
    $auth = Zend_Auth::getInstance(); 
    $result = $auth->authenticate($authAdapter); 

    if ($result->isValid()) { 
     if ($data['public'] == "1") { 
      Zend_Session::rememberMe(Zend_Registry::getInstance()->constants->sessiontime); 
     } else { 
      Zend_Session::forgetMe(); 
     } 
     return TRUE; 
    } else { 
     return FALSE; 
    } 

계정이 확인되지 않았음에도 불구하고 인증이 통과되었습니다. 어디에서 잘못 되었습니까?

답변

1

자격 증명 치료 매개 변수는 암호 확인 방법을 지정합니다. 이를 재정의하여 절을 추가 할 수 있지만 여전히 비밀번호 비트를 포함해야합니다. 정말 나는 당신의 방법은 모든 사용자를 인증 할 것으로 예상 않았을 것이다, 그래서 이것은 주요 문제가 될 수 있지만 시도하지 않을 수 있습니다

$authAdapter->setCredentialTreatment('MD5(?) AND Confirmed = 1'); 

그러나 암호가 암호화에 대한 MD5 비트를 변경. 그러면 다음 줄을 따라 검색어가 생성됩니다.

... WHERE Email = 'xxx' AND Password = MD5(?) AND Confirmed = 1 
관련 문제