Я использую ZF2
в сочетании с ZFCUser
и bjyauthorize
. У меня есть целевая страница, которая должна быть доступна по всему миру. Все остальные страницы должны быть за логином.
Сначала я обвинил bjyauthorize
в том, что вы не позволили гостевым пользователям получить доступ к моей целевой странице. Но после некоторых обсуждений кажется, что ZFCUser
блокирует этот путь.
Мой вопрос: как я могу сказать ZFCUser не блокировать одну страницу / действие?
Редактировать:
Мое Application/Module.php
выглядит в этом сообщении . Когда я добавляю мое приложение myApp
в белый список, я могу получить доступ к моей целевой странице, но все другие действия от myApp
.
Любые идеи о том, как изменить условие, которое я могу сопоставить с URL-адресом или просто использовать мой внешний интерфейс?
Возможно, я мог бы добавить второй маршрут на свою целевую страницу. Но это не чистое решение, верно?
Если вы настаиваете на проверке подлинности в методе onBoostrap, вы можете сделать что-то вроде этого:
class Module { protected $whitelist = array( 'zfcuser/login' => array('login'), 'your-landing-route' => array('your-landing-action'), ); public function onBootstrap($e) { $app = $e->getApplication(); $em = $app->getEventManager(); $sm = $app->getServiceManager(); $list = $this->whitelist; $auth = $sm->get('zfcuser_auth_service'); $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 and action is whitelisted $routeName = $match->getMatchedRouteName(); $action = $match->getParam("action"); if(array_key_exists($routeName,$list) && in_array($action,$list[$routeName])) { 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' => 'zfcuser/login' )); $response = $e->getResponse(); $response->getHeaders()->addHeaderLine('Location', $url); $response->setStatusCode(302); return $response; }, -100); } }
Я немного изменил код, но ваш белый список также содержит конкретные действия. Затем мы можем проверить параметр действия, который будет немного более конкретным с вашим белым листингом.
Я не знаю, если это лучший способ сделать это, я просто покажу вам, как вы можете это сделать.
Я не думаю, что вам даже нужно проверять аутентификацию при использовании BjyAuthorize
поскольку вы можете просто использовать проверки ресурсов. Если у пользователя есть что-то другое, кроме роли гостя, они являются реальным пользователем и проходят проверку подлинности. Опять же, я не на 100%, но я знаю, что я не использую проверки проверки подлинности ZfcUser
в своем приложении, которое использует BjyAuthorize
. Я просто использую защитников маршрута, чтобы указать уровень ролей, необходимый для отдельного маршрута.
Может быть, кто-то еще может это прояснить?