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
. ルート ガードを使用して、特定のルートに必要な役割レベルを指定するだけです。
多分他の誰かがこれを明確にすることができますか?