Zend framework2 如何使用应用程序&x2019;蜂王的身份?

Zend framework2 如何使用应用程序&x2019;蜂王的身份?,zend-framework2,laminas-api-tools,Zend Framework2,Laminas Api Tools,我的身份验证用例相当简单。当用户登录时,我只在ZF应用程序的前端使用API。因此,对我来说,提供的任何身份验证适配器似乎都有些过分。我根本不需要API来请求凭据 我想使用浏览器会话中提供的标识。如果用户已登录,则API应可访问,否则不可访问 所以我想我必须做的是,以某种方式将应用程序的身份验证适配器或标识注入到Apigility API模块中 我的应用程序使用和来管理角色和身份。这似乎很难实现,因为Apigility使用zf mvc auth提供的自己的身份模型,这与ZfcUser的身份不兼容。

我的身份验证用例相当简单。当用户登录时,我只在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
    );
}

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

Rest是一种无状态体系结构。你所说的“浏览器会话”是什么意思?您的API不应使用/依赖/读/写会话或cookie@福兹,我完全知道这一点。不管怎样,我都想这样做。我的API只用于web应用前端的JavaScript请求。Rest是一个无状态架构。你所说的“浏览器会话”是什么意思?您的API不应使用/依赖/读/写会话或cookie@福兹,我完全知道这一点。不管怎样,我都想这样做。我的API仅用于web应用程序前端的JavaScript请求。