我在 owncloud 7.0 上遇到一个简单的问题
我正在创建一个必须检查条件并重定向到页面以验证某些内容的应用程序。我的目标是禁用服务使用,直到条件正常。
在标称场景中,用户登录,如果条件未验证,系统将用户重定向到验证页面。所以我使用 postLogin 钩子。
但是,如果用户尝试更改页面而不进行验证,我必须抓住他并将其重定向回验证页面。
我试过中间件(owncloud拦截器),但它们不是全局的,所以第二种情况失败了。
现在我正在处理应用程序加载并执行类似的操作
$app = new MyApp();
$c = $app->getContainer();
if ( $c->isLoggedIn() ) {
$requestedPath = path($_SERVER['REQUEST_URI']);
$redirectPath = $c->getServer()->getURLGenerator()->linkToRoute('myapp.page.validate');
$refererPath = path($_SERVER['HTTP_REFERER']);
if ( $requestedPath !== $redirectPath && $redirectPath !== $refererPath ) {
$location = $c->getServer()->getRouter()->generate('myapp.page.validate');
header('Location: ' . $location);
exit();
}
}
function path($url) {
$urlArray = parse_url($url);
return $urlArray['path'];
}
它适用于第一种情况,但我在第二种情况下进行了几次重定向。我认为它必须存在更好的解决方案。有人有想法吗?
PS:我在 IRC 频道上曝光了我的案例,但没有成功引起某人的兴趣 :)