Zend Framework 2 – ZFCUser – Как исключить целевую страницу из auth

Я использую 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 . Я просто использую защитников маршрута, чтобы указать уровень ролей, необходимый для отдельного маршрута.

Может быть, кто-то еще может это прояснить?