我在过去2天遇到以下问题但仍然无法解决问题。
在http://akrabat.com/zend-auth-tutorial/的帮助下,我在Zend Framework中使用Zend_Auth
进行身份验证模块。身份验证成功后,我使用getStorage()
;
示例:
AuthController.php
方法_process
我写的是这样的:
protected function _process($values) {
// Get our authentication adapter and check credentials
$adapter = $this->_getAuthAdapter();
$adapter->setIdentity($values['username']);
$adapter->setCredential($values['password']);
$auth = Zend_Auth::getInstance();
$result = $auth->authenticate($adapter);
if ($result->isValid()) {
$user = $adapter->getResultRowObject();
$auth->getStorage()->write($user);
return true;
}
return false;
}
print_r($user)
显示结果:
stdClass Object ( [id] => 1 [username] => admin [password] => cb3aefbdffbc81588f3d43c394428b16d4346b44 [salt] => ce8d96d579d389e783f95b3772785783ea1a9854 [role] => administrator [date_created] => 2012-12-29 11:04:40)
此外,
print_r($auth->getStorage()->read());
这也向我展示了结果。
现在,如果用户成功登录,我想显示Logout
链接。
view\helpers\LoggedInAs.php
class Zend_View_Helper_LoggedInAs extends Zend_View_Helper_Abstract {
public function loggedInAs() {
$auth = Zend_Auth::getInstance();
if ($auth->hasIdentity()) {
$username = $auth->getIdentity()->username;
$logoutUrl = $this->view->url(array('controller' => 'auth',
'action' => 'logout'), null, true);
return 'Welcome ' . $username . '. <a href="' . $logoutUrl . '">Logout</a>';
}
$request = Zend_Controller_Front::getInstance()->getRequest();
$controller = $request->getControllerName();
$action = $request->getActionName();
if ($controller == 'auth' && $action == 'index') {
return '';
}
$loginUrl = $this->view->url(array('controller' => 'login', 'action' => 'index'));
return '<a href="' . $loginUrl . '">Login</a>';
}
}
但它没有调用方法hasIdentity
这就是为什么它不会进入if
块和
print_r($auth)
显示如下输出:
Zend_Auth Object ( [_storage:protected] => )
如果我正在做print_r($_SESSION);
,那么它也会显示空白数组。问题是$_SESSION
在控制器和模块中工作,但在view/helpers
中显示空白数组。
Bootstrap.php
protected function _initSession() {
try {
Zend_Session::start();
} catch (Zend_Session_Exception $e) {
session_start();
}
}
我使用的是Zend Framework版本1.11
。
我不确定这是Session
或Zend_Auth::getInstance()
还是view helpers
的问题。
由于这个问题,我无法继续学习Zend_ACL
模块。我该如何解决这个问题。
任何帮助都将不胜感激。
提前致谢
答案 0 :(得分:0)
将以下代码放在view helper
班级view\helpers\LoggedInAs.php
/**
* @see Zend_Session
*/
require_once 'Zend/Session.php';
/**
* @see Zend_View_Helper_Abstract
*/
require_once 'Zend/View/Helper/Abstract.php';