如何在用户未登录zfcuser时排除某些路由?

时间:2014-02-21 11:13:21

标签: php zend-framework zend-framework2 zfcuser

所以,我是Zend Framework的新手,我安装了 ZfcUser ,我希望当用户没有登录时没有访问某些路由,例如:/ blog / article / add,< / p>

实际上我使用<?php if($this->zfcUserIdentity()) :?>检查用户是否已登录,但如果尝试访问/ blog / article / add,我该如何将用户重定向到我的登录路由/user, 所以,如果有人有任何想法,我将非常感激:)

2 个答案:

答案 0 :(得分:4)

我不同意所选择的答案,因为在你想拒绝访问的每个控制器的每个动作中做这些事情并不真实。

有两个用于此任务的大模块。第一个是BjyAuthorize,另一个是ZfcRbac。请检查出来。 ZfcRbac是我最喜欢的(因为我为它编写了文档),但它需要PHP 5.4 +

答案 1 :(得分:0)

简单方法:

控制器中的

if (!$this->zfcUserAuthentication()->hasIdentity()) {
    return $this->redirect()->toRoute('route_to_login',array('param' => $param));
}

更多: (在auth zfcuset之后会将您重定向到以前的控制器)

in module.config.php

'controllers' => array(
    'invokables' => array(
        'zfcuser' => 'Application\Controller\UserController',
    ),
...
),

下一个复制文件供应商\ zf-commons \ zfc-user \ src \ ZfcUser \ Controller \ UserController.php 到模块应用程序(与module.config.php中相同的文件夹)

删除除authenticateAction之外的所有函数 加:     使用Zend \ Session \ Container; 并改变 return $this->redirect()->toRoute($this->getOptions()->getLoginRedirectRoute());

$redirect_session = new Container('redirect');
        $redirect = $redirect_session->redirect;
        if($redirect!='')
        {
            unset($_SESSION['redirect']);
            return $this->redirect()->toRoute($redirect, array('lang' => $lang));
        }
        return $this->redirect()->toRoute($this->getOptions()->getLoginRedirectRoute(),array('param' => $param));

最后添加控制器

use Zend\Session\Container;
...
if (!$this->zfcUserAuthentication()->hasIdentity()) {
            $redirect_session = new Container('redirect');
            $redirect_session->redirect = 'route_to_this_controller_action';
            return $this->redirect()->toRoute('route_to_login',array('param' => $param));
        }