12

所以,问题是如何在我的模块中配置 Module.php 来检查用户是否在会话中?如果他不是,我想将他重定向到登录页面。

如果用户不在会话中(未登录),我不希望用户有权执行其他操作(控制器)。

4

3 回答 3

9

这应该通过 ZF2 中的事件来完成以获取更多详细信息:单击此处此代码也可能对您有所帮助。http://pastebin.com/FFGVCpki

public function init() {
    // Attach Event to EventManager
    $events = StaticEventManager::getInstance ();

    // Add event of authentication before dispatch
    $events->attach ( 'Zend\Mvc\Controller\AbstractActionController', 'dispatch', array (
            $this,
            'authPreDispatch' 
    ), 110 );
}
public function authPreDispatch($event){
$target = $event->getTarget ();
$serviceLocator = $target->getServiceLocator();
// Do what ever you want to check the user's identity
$url = $event->getRouter ()->assemble ( array (
                    "controller" => "<controller>" 
            ), array (
                    'name' => '<route name>' 
            ) );
$response = $event->getResponse ();
        $response->setHeaders ( $response->getHeaders ()->addHeaderLine ( 'Location', $url ) ));
        $response->setStatusCode ( 302 );
        $response->sendHeaders ();
        exit ();
}
于 2012-10-30T10:08:52.697 回答
5

不要使用重定向,使用“路由”事件执行 setParam() 方法,请参阅此https://github.com/samsonasik/SanAuthWithDbSaveHandler/commit/e2ae4dfcebb7a952d7b1adaadcf6496c994423b9

于 2013-11-13T10:09:41.427 回答
2

一些喜欢:

$e->getRouteMatch()
->setParam('controller', 'Application\Controller\Login')
->setParam('action', 'login');
于 2014-06-17T06:47:35.027 回答