所以,问题是如何在我的模块中配置 Module.php 来检查用户是否在会话中?如果他不是,我想将他重定向到登录页面。
如果用户不在会话中(未登录),我不希望用户有权执行其他操作(控制器)。
所以,问题是如何在我的模块中配置 Module.php 来检查用户是否在会话中?如果他不是,我想将他重定向到登录页面。
如果用户不在会话中(未登录),我不希望用户有权执行其他操作(控制器)。
这应该通过 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 ();
}
不要使用重定向,使用“路由”事件执行 setParam() 方法,请参阅此https://github.com/samsonasik/SanAuthWithDbSaveHandler/commit/e2ae4dfcebb7a952d7b1adaadcf6496c994423b9
一些喜欢:
$e->getRouteMatch()
->setParam('controller', 'Application\Controller\Login')
->setParam('action', 'login');