2011-03-18 6 views
0

안녕하세요. 내 사이트에 다음 로그인 컨트롤러를 만들었습니다. 로그 아웃 할 때 사용자를 로깅하는 것과 관련하여 문제가 없습니다. 내가하고 싶은 일은 성공한 페이지의 FlashMessenger에 로그인 한 사용자 이름을 반향시키는 것입니다. 내 코드가 어떻게 나타 났는지에 대해서 성공 페이지로 리디렉션되면 "Array로 성공적으로 로그인되었습니다."라는 메시지가 나타납니다. $ session-> user = $ adapter> getResultArray ('Password') 줄을 다음과 같이 물을 수 있습니까? 데이터베이스의 암호 값보다 적은 사용자 정보 배열을 작성하십시오. 사전에Zend Framework Zend_Session_Namespace에서 로그인 한 사용자 이름을 인쇄하는 방법

많은 감사,

IrishStudent76

<?php 
class LoginController extends Zend_Controller_Action 
{ 
    public function init(){  

     $this->view->doctype('XHTML1_STRICT'); 

} 

// login action 
public function loginAction() 
{ 
$form = new PetManager_Form_Login; 
$this->view->form = $form;  

/* 
    check for valid input from the form and authenticate using adapter 
    Add user record to session and redirect to the original request URL if present 
*/ 
if ($this->getRequest()->isPost()) { 
    if ($form->isValid($this->getRequest()->getPost())) { 
    $values = $form->getValues(); 

    $adapter = new PetManager_Auth_Adapter_Doctrine(
     $values['username'], $values['password'] 
    ); 
    $auth = Zend_Auth::getInstance(); 
    $result = $auth->authenticate($adapter); 
    if ($result->isValid()) { 
     $session = new Zend_Session_Namespace('petmanager.auth'); 
     $session->user = $adapter->getResultArray('Password'); 
     if (isset($session->requestURL)) { 
     $url = $session->requestURL; 
     unset($session->requestURL); 
     $this->_redirect($url); 
     } else { 
     $this->_helper->getHelper('FlashMessenger') 
         ->addMessage('You have been successfully logged in as '.$session- >user); 
     $this->_redirect('/login/success'); 
     } 
    } else { 
     $this->view->message = 'You could not be logged in. Please try again.';   
    }   
    } 
} 
} 

public function successAction() 
{ 
if ($this->_helper->getHelper('FlashMessenger')->getMessages()) { 
    $this->view->messages = $this->_helper 
           ->getHelper('FlashMessenger') 
           ->getMessages();  
} else { 
    $this->_redirect('/login');  
}  
} 

public function logoutAction() 
{ 
Zend_Auth::getInstance()->clearIdentity(); 
Zend_Session::destroy(); 
$this->_redirect('/'); 
} 

} 
+1

을 이런 식으로 뭔가를 시도? 당신은 당신의 auth 세션에 저장할 수 없습니까? '$ auth-> getStorage() -> 쓰기 ($ whatEverYouWantToStore); – Marcin

답변

1

당신이 나중에 메시지에 통합하려고 $ 세션 -> 사용자 설정 곳입니다 :

$session->user = $adapter->getResultArray('Password'); 

로를 결과 배열을 얻고 있으므로 $ session-> user 배열을 저장할 필요가 없습니다. 사용자 이름을 얻기 위해 $auth->getIdentity()을 사용하지 않는 이유는 무엇입니까?

그리고 나는 the manual을 읽는 것을 고려할 것입니다, 그것은 모든 것을 아주 명백하게 보여줍니다!

+0

배열이라면,'-> user'는 작동하지 않을 것입니다. – Phil

+0

아마도 배열이라고 부르지 만 실제로 유체 인터페이스입니다. – markus

+0

그것은 분명히 배열입니다. 그렇지 않으면 OP가 "Logged in Array"가되지 않을 것입니다. – Phil

0

자신 만의 세션 인증 저장소를 롤업 할 필요는 없습니다.이 저장소는 모두 Zend_Auth에 내장되어 있습니다. 당신은 로그인 한 사용자에 대한 정보를 저장하는 별도의 세션이 필요한 이유는 무엇

은 ...

if ($result->isValid()) { 
    $identity = $adapter->getResultArray('Password'); 
    $auth->getStorage()->write($identity); 
    $session = new Zend_Session_Namespace('petmanager.auth'); 
    if (isset($session->requestURL)) { 
    $url = $session->requestURL; 
    unset($session->requestURL); 
    $this->_redirect($url); 
    } else { 
    $this->_helper->getHelper('FlashMessenger') 
        ->addMessage('You have been successfully logged in as '.$identity['NameColumn']); 
    $this->_redirect('/login/success'); 
    } 
} else { 
    $this->view->message = 'You could not be logged in. Please try again.';   
}   
관련 문제