gpt4 book ai didi

php - 如果用户未登录,ZF2 在每个页面上重定向到登录页面

转载 作者:行者123 更新时间:2023-12-02 13:37:13 25 4
gpt4 key购买 nike

有没有有效的方法来做到这一点?我研究过的选项:

  • 检查布局中的 session 容器
  • 检查模块 onBootstrap functions() 中的 session 容器
  • 在每个 Controller /操作中单独处理 session 容器

理想情况下我会检查一次,有没有正确的方法可以做到这一点?

类似的东西......

$session = new Container('username');
if($session->offsetExists('username')) {
//check im not already at my login route
//else redirect to login route
}
}

最佳答案

您可以在每个 Controller 中使用以下代码

public function onDispatch(\Zend\Mvc\MvcEvent $e)
{
if (! $this->authservice->hasIdentity()) {
return $this->redirect()->toRoute('login');
}

return parent::onDispatch($e);
}

您还可以在模块的onBootstrap函数()上检查 session ,您需要使用zf2事件来匹配路由:

$auth = $sm->get('AuthService');
$em->attach(MvcEvent::EVENT_ROUTE, function ($e) use($list, $auth)
{
$match = $e->getRouteMatch();

// No route match, this is a 404
if (! $match instanceof RouteMatch) {
return;
}

// Route is whitelisted
$name = $match->getMatchedRouteName();

if (in_array($name, $list)) {
return;
}

// User is authenticated
if ($auth->hasIdentity()) {
return;
}

// Redirect to the user login page, as an example
$router = $e->getRouter();
$url = $router->assemble(array(), array(
'name' => 'login'
));

$response = $e->getResponse();
$response->getHeaders()
->addHeaderLine('Location', $url);
$response->setStatusCode(302);

return $response;
}, - 100);

其中$list将包含不被处理的路由列表:

$list = array('login', 'login/authenticate');

关于php - 如果用户未登录,ZF2 在每个页面上重定向到登录页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29251978/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com