2012-01-25 3 views
5

는 여기 젠드 인증을 통해 로그인 시스템을 만들어 이제 코드젠드 세션 및 젠드 인증

// userAuthentication 
    public function authAction(){ 
     $request  = $this->getRequest(); 
     $registry = Zend_Registry::getInstance(); 
     $auth  = Zend_Auth::getInstance(); 
     $DB = $registry['DB']; 
      $authAdapter = new Zend_Auth_Adapter_DbTable($DB); 
       $authAdapter->setTableName('user') 
          ->setIdentityColumn('user_name') 
          ->setCredentialColumn('user_password'); 

     $username = $request->getParam('username'); 
     $password = $request->getParam('password'); 
     $authAdapter->setIdentity($username); 
     $authAdapter->setCredential($password); 
     $result = $auth->authenticate($authAdapter); 

     if($result->isValid()){ 
      $data = $authAdapter->getResultRowObject(null,'password'); 
      $auth->getStorage()->write($data); 
      $this->_redirect('/login/controlpannel'); 
     }else{ 
      $this->_redirect('/login/login'); 
     } 
    } 

에게이 작품의 벌금을입니다했다. 사용자 이름과 비밀번호가있는 user_id (열)가 사용자 (테이블)에 있습니다. 나는 (이름)의 ControlPanel 단지 로그인이 테이블에서 특정 USER_ID를 얻고 나는이 $의 USER_ID에 대한 몇 가지 정보를 조회 할 수 있도록

$user_session = new Zend_Session_Namespace('user_session'); 
$user_session->username = $username; 
$user_id->user_id  = $user_id; 

을 통해 세션에 넣어 볼에 결과를 전달해야

+1

왜 수동으로 세션에 넣으시겠습니까? 일단 로그인하면 세션이 생성되고 저장 장치에서 가져올 수 있습니다. –

+0

@Teez 어떻게 스토리지에서 user_id를 얻을 수 있습니까 ??? –

+1

$ data = Zend_Auth :: getInstance() -> getStorage() -> read(); $ this-> view-> username = $ data-> user_name; $ this-> view-> id = $ data-> user_id; –

답변

8

저장소에서 사용자 ID를 가져옵니다 :

$userInfo = Zend_Auth::getInstance()->getStorage()->read(); 

echo $userInfo->user_id; 
3

당신은 길을 Teez 제안 데이터에 액세스하거나 Zend_Session_Namespace에서 당겨 수 있습니다.

15.1.3.1. PHP 세션의 기본 지속성
기본적으로 Zend_Auth는 PHP 세션을 사용하여 성공적인 인증 시도에서 ID의 영구 저장소를 제공합니다. 인증 시도가 성공하면 Zend_Auth :: authenticate()는 인증 결과의 ID 을 영구 저장소에 저장합니다. 그렇지 않은 경우 이 구성되지 않으면 Zend_Auth는 Zend_Auth_Storage_Session이라는 저장소 클래스를 사용하며 Zend_Auth_Storage_Session은 Zend_Session을 사용합니다. 사용자 정의 클래스는 대신 Zend_Auth_Storage_Interface to Zend_Auth :: setStorage()를 구현하는 객체를 제공하여 사용할 수 있습니다.

Zend_Auth_Storage_Session은 'Zend_Auth'라는 세션 네임 스페이스를 사용합니다. 이 네임 스페이스는 다른 값을 Zend_Auth_Storage_Session의 생성자에 전달하여 재정의 할 수 있으며이 값은 내부적으로 Zend_Session_Namespace의 생성자에 전달 된 입니다. Zend_Auth :: authenticate()가 ID의 자동 저장을 수행하기 때문에 인증을 시도하기 전에 이 발생해야합니다.

+0

고맙습니다. –

+0

좋은 답변입니다. 그것은 내 문제를 해결했다. 감사합니다 :-) –

8

이미 답변했지만, getIdentity() 기능을 getStorage()->read() 체인보다 자주 사용하는 경향이 있습니다. 아래의 예. * 는 1-i가 시작

protected function _initSession() 
{ 

    $UserSession = new Zend_Session_Namespace('UserSession'); 
    $UserSession->setExpirationSeconds(/* you may fix a limit */); 
    Zend_Registry::set('UserSession', $UserSession); 
} 

/* 로그인 행동, 올바른 사용자 이름 & PWD 후 부트 스트랩에 init 함수를 정의하여 :

// to check if authenticated 
Zend_Auth::getInstance()->hasIdentity(); 

// to actually get the details from storage 
Zend_Auth::getInstance()->getIdentity()->user_id; 

// if I need to use the identity over and over 
$identity = Zend_Auth::getInstance()->getIdentity(); 
$userId = $identity->user_id; 
1

이 내 방식이며 좋은 일이야/

// Create session 
    $UserSession = Zend_Registry::get('UserSession'); 
// Get the user from database 
$db = Zend_Db_Table::getDefaultAdapter(); 
$user = $db->fetchRow("SELECT * FROM user_table WHERE user_email = '".$user_email."'"); 

//then you assign to $user to $UserSession variable : 
$UserSession->user = $user; 

//finaly don't forget to unset session variable in the Logout action ... 
+0

그런 쿼리 전에 사용자 이메일을 살균/매개 변수화하는 것을 기억하십시오;) – Asmodiel

2

세션에 배열을 할당하려면 영역을 만드는 세션에 이름을 지정해야합니다. 즉, getStorage를 수행하기 전에 setStorage를 수행해야합니다.

이 같은 코드를 작성해야합니다

$x = new Zend_Auth_Storage_Session('User_Auth'); 
$y = $x->read(); 

을 당신은 객체로 $ y를에서 모든 것을 얻을 : 스토리지 값을 얻기 위해 다음

// userAuthentication 
    public function authAction(){ 
     $request  = $this->getRequest(); 
     $registry = Zend_Registry::getInstance(); 
     $auth  = Zend_Auth::getInstance(); 
     $DB = $registry['DB']; 
      $authAdapter = new Zend_Auth_Adapter_DbTable($DB); 
       $authAdapter->setTableName('user') 
          ->setIdentityColumn('user_name') 
          ->setCredentialColumn('user_password'); 


     $username = $request->getParam('username'); 
     $password = $request->getParam('password'); 
     $authAdapter->setIdentity($username); 
     $authAdapter->setCredential($password); 
     $authAdapter->setStorage(new Zend_Auth_Storage_Session('User_Auth')); 
     $result = $auth->authenticate($authAdapter); 
     if($result->isValid()){ 
     $data = $authAdapter->getResultRowObject(null,'password'); 
     $auth->getStorage()->write($data); 
     $this->_redirect('/login/controlpannel'); 
     }else{ 
      $this->_redirect('/login/login'); 
     } 
    } 

을하고,이를 사용해야합니다.

즐기십시오!

0
user = Zend_Auth :: getInstance() -> getIdentity(); if (! @ $ this-> user) { $ objSession-> errorMsg = "Please First Login ..!"; $ this -> _ redirect ('/ user/login'); } ?>
+0

이 코드를 사용하여 ur 데이터에 따라 수정하십시오 –