大家好我已经为我的网站创建了以下登录控制器,它可以在登录用户时记录用户。我想做的事情就是将登录的用户名称回到FlashMessenger中以获取成功页面,因为我的代码代表我只有在重定向到成功页面时才会收到以下消息:“您已成功登录为Array”。 我还可以问下面的行$ session-> user = $ adapter> getResultArray('Password');创建一个用户信息数组,减去数据库中的密码值。
非常感谢,
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('/');
}
}
答案 0 :(得分:1)
这是您设置$ session-&gt;用户的位置,您稍后会尝试将其集成到消息中:
$session->user = $adapter->getResultArray('Password');
如您所见,您正在获取结果数组,因此难怪$ session-&gt;用户存储数组。为什么不使用$auth->getIdentity()
来获取用户名?
我会考虑阅读the manual,它会以非常明确的方式显示所有内容!
答案 1 :(得分: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.';
}