在zend框架2中使用URL重定向进行身份验证

时间:2013-03-13 09:57:12

标签: php zend-framework2

我是Zend Framework 2的新手。

我创建了一个“Admin”模块,还创建了“UserController”和“AlbumController”。 UserController包含登录和注销操作。 AlbumController包含正常的CRUD和欢迎动作。

现在,当我已经登录时直接访问http://localhost/websites/zendtest/public/admin/login时,如何在欢迎页面上重定向页面。

同样的问题是当我没有登录时直接访问http://localhost/websites/zendtest/public/admin/album/welcome时,如何在登录页面上重定向页面。

任何人都可以建议我解决这个问题吗?

我还有另一个问题,我如何在layout.phtml中使用控制器动作值,因为我有MenuContoller用于创建菜单。所以我需要从layout.phtml中的MenuController返回数组来创建动态菜单。

那么,我该怎么做?

2 个答案:

答案 0 :(得分:0)

我认为你不会在ZF2 doc中解释。要恢复,您必须使用redirect插件测试会话和重定向:

$this->redirect()->toRoute('actionname');

重定向插件的使用方式如下:

->toRoute($route, array $params = array(), array $options = array());

使用提供的$params$options重定向到指定路线,以汇总网址。

要对旧版ZF的acl插件等用户进行身份验证,请转到this page

对于最后一个问题,您可以使用(对于ZF2.1.3)视图中的某些值

$layout = $this->layout();
$layout->myvar = $mymenuarray;

使用

在视图中检索它
$myvar...

答案 1 :(得分:0)

我不知道您是如何对用户进行身份验证的,但如果您使用的是Zend\Auth,那么您可以执行以下操作:

public function loginAction() {
    $authService = new \Zend\Authentication\AuthenticationService();
    $authService->setStorage(new \Zend\Authentication\Storage\Session('user', 'details'));

    if ($authService->hasIdentity()) {
        // User is already logged in; redirect to welcome page
        return $this->redirect()->toRoute('welcome'); // Assumes that you have a 'welcome' route
    }
}

欢迎采取行动:

public function welcomeAction() {
    $authService = new \Zend\Authentication\AuthenticationService();
    $authService->setStorage(new \Zend\Authentication\Storage\Session('user', 'details'));

    if (!$authService->hasIdentity()) {
        // User is not logged in; redirect to login page
        return $this->redirect()->toRoute('login'); // Assumes that you have a 'login' route
    }
}

如果您希望在许多页面上执行此操作,则上述内容可能非常重复,因此您应该考虑将其重复使用,例如:从服务管理器( factory )获取身份验证服务。