如何在每次用户访问zend中的网站页面时获取用户信息?

时间:2011-06-20 06:46:05

标签: php zend-framework

我是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');
    }
 }

.......

2 个答案:

答案 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"

现在,每个请求都会自动调用您的插件。

我希望我已经回答了你的问题。如果我在帖子中遗漏了某些内容,请告诉我。