我是Zend的新手
我搜索了它,得到了以下链接, how to keep track of currently logged user in zend framework
但我的要求不同。
我的情况是,我有一个名为AuthenticationController的独立控制器,用于在会话中使用Zend_Auth存储已记录的用户详细信息并执行其他操作,现在我必须获取已记录的用户信息,当每次登录用户访问每个页面时站点。
所以我必须在普通文件中做一些逻辑,每次触发都会在zend中获取用户信息。
我怎么能在zend做到这一点?
以下是示例代码..
if ($form->isValid($request->getPost())) {
if ($this->_process($form->getValues())) {
$authentication = Zend_Auth::getInstance();
if ($authentication ->getIdentity()->myfirstlogin == 0) {
$this->_helper->redirector('index', 'test1');
} else {
$this->_helper->redirector('index', 'test2');
}
} else {
$myUserStatus = new Zend_Session_Namespace('myuserStatus');
if ($myUserStatus ->status == 2) {
$this->_helper->FlashMessenger('Incorrect Username / Password');
} else if ($myUserStatus ->delete == 1) {
$this->_helper->FlashMessenger('Your **** approval.');
} else {
$this->_helper->FlashMessenger('Please ****** administrator');
}
unset($myUserStatus);
$this->_helper->redirector('index', 'auth');
}
}
.......
答案 0 :(得分:2)
我相信您使用了Database Table Authentication&你有这样的stored your results。如果这是正确的。
你应该能够验证会话并获得这样的细节(在你想要的任何控制器中):
To Validate:
$sessionvars = Zend_Auth::getInstance()->getIdentity();
if (!Zend_Auth::getInstance()->hasIdentity()) {
$this->_redirect('/');
}
...
...
To retrieve the data:
$userData = Zend_Auth::getInstance()->getIdentity();
print_r($userData);
答案 1 :(得分:1)
我相信OP希望在公共文件中进行身份验证。我认为最好的选择是制作一个插件
在库文件夹中创建一个新类。您可以选择使用不同的文件夹结构,但我在此示例中使用的文件夹结构是library / Custom / Plugins / AuthCheck.php
class Custom_Plugins_AuthCheck extends Zend_Controller_Plugin_Abstract
{
public function preDispatch (Zend_Controller_Request_Abstract $request)
{
// checking for identity. We want to avoid the check if this is the login form.
if (($request->getModuleName() == 'default' && $request->getControllerName() == 'login')){
return;
}
else if(!Zend_Auth::getInstance()->hasIdentity()){ // if identity does not exist..redirect to login form
$request->setModuleName('default')->setControllerName('login')->setActionName('index');
$request->setDispatched(false);
}
}
}
请注意,我使用了一个名为preDispatch的函数。这不是随机名称选择。我想在每次调度行动之前调用这段代码。 Zend Framework在此阶段有一个内置的插件调用,它被称为preDispatch()
您可以在官方手册中阅读有关插件here的更多信息。
现在我们的插件准备好了。我们必须注册这个插件,以便Zend Framework知道每次有preDispatch()插件调用时都必须调用这个插件。
我知道注册插件的最简单方法是将这一行添加到您的application.ini
resources.frontController.plugins.AuthCheck = "Custom_Plugins_AuthCheck"
现在,每个请求都会自动调用您的插件。
我希望我已经回答了你的问题。如果我在帖子中遗漏了某些内容,请告诉我。