如何在Apigility中使用应用程序的身份验证身份?

时间:2015-08-24 14:16:43

标签: zend-framework2 apigility

我的身份验证用例非常简单。当用户登录时,我只在我的ZF应用程序的前端使用我的API。因此,任何提供的身份验证适配器对我来说都是过度的。我根本不需要API来申请凭据。

我想使用浏览器会话中提供的身份。如果用户已登录,则应该可以访问API,否则无法访问。

所以我想我必须以某种方式将应用程序的身份验证适配器或身份注入Apigility API模块。

我的应用使用ZfcUserZfcRbac来管理角色和身份。

1 个答案:

答案 0 :(得分:0)

这似乎很难实现,因为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
    );
}