如何在 Apigility 中使用应用程序的身份验证?
How do I use application’s auth identity in Apigility?
我的身份验证用例非常简单。当用户登录时,我只在我的 ZF 应用程序的前端使用我的 API。所以任何提供的身份验证适配器对我来说似乎都太过分了。我根本不需要 API 来询问凭据。
我想使用浏览器会话中提供的身份。如果用户已登录,API 应该可以访问,否则不能访问。
所以我想我必须要做的是以某种方式将应用程序的身份验证适配器或身份注入 Apigility API 模块。
这似乎很难实现,因为 Apigility 使用 zf-mvc-auth 提供的自己的身份模型,这与 ZfcUser 的身份不兼容。所以简单地切换身份验证服务并不能完成工作。
我现在找到了一个解决方案,尽管是一个不灵活的解决方案。在我的应用程序的 Module.php 中,我将事件侦听器附加到 zf-mvc-auth 的 EVENT_AUTHORIZATION 事件,并简单地修改事件本身的授权状态。
不是很酷,但只要您必须区分客人身份和其他一切,它就可以工作。角色不是这样工作的。
public function onBootstrap(MvcEvent $e)
{
$serviceManager = $e->getApplication()->getServiceManager();
$eventManager->attach(
MvcAuthEvent::EVENT_AUTHORIZATION,
function(MvcAuthEvent $mvcAuthEvent) use ($serviceManager)
{
$authService = $serviceManager->get('Zend\Authentication\AuthenticationService');
if ($authService->hasIdentity()) {
$mvcAuthEvent->setIsAuthorized(true);
}
},
100
);
}
我的身份验证用例非常简单。当用户登录时,我只在我的 ZF 应用程序的前端使用我的 API。所以任何提供的身份验证适配器对我来说似乎都太过分了。我根本不需要 API 来询问凭据。
我想使用浏览器会话中提供的身份。如果用户已登录,API 应该可以访问,否则不能访问。
所以我想我必须要做的是以某种方式将应用程序的身份验证适配器或身份注入 Apigility API 模块。
这似乎很难实现,因为 Apigility 使用 zf-mvc-auth 提供的自己的身份模型,这与 ZfcUser 的身份不兼容。所以简单地切换身份验证服务并不能完成工作。
我现在找到了一个解决方案,尽管是一个不灵活的解决方案。在我的应用程序的 Module.php 中,我将事件侦听器附加到 zf-mvc-auth 的 EVENT_AUTHORIZATION 事件,并简单地修改事件本身的授权状态。
不是很酷,但只要您必须区分客人身份和其他一切,它就可以工作。角色不是这样工作的。
public function onBootstrap(MvcEvent $e)
{
$serviceManager = $e->getApplication()->getServiceManager();
$eventManager->attach(
MvcAuthEvent::EVENT_AUTHORIZATION,
function(MvcAuthEvent $mvcAuthEvent) use ($serviceManager)
{
$authService = $serviceManager->get('Zend\Authentication\AuthenticationService');
if ($authService->hasIdentity()) {
$mvcAuthEvent->setIsAuthorized(true);
}
},
100
);
}