使用ZF2登录webservice

时间:2014-08-05 14:26:21

标签: php web-services zend-framework zend-framework2

我有一个配置了json策略的web服务模块。我正在创建登录功能,如果用户未登录则返回错误。

测试用户是否已登录在Module类

上有事件调度
class Module {
public function onBootstrap(MvcEvent $e) {
    (...)

    $eventManager->attach(MvcEvent::EVENT_DISPATCH, array($this, 'mvcPreDispatch'), 1000);
}

public function mvcPreDispatch(MvcEvent $e) {
    $authService = $e->getApplication()->getServiceManager()->get('auth');
    if($authService->isAuthenticated()) {
        return true;
    }

    $model = new JsonModel(array(
        'errors' => array(
            'httpCode' => $e->getResponse()->getStatusCode(),
            'title' => $e->getResponse()->getReasonPhrase(),
            'message' => 'Login necessário'
        )
    ));

    return $model;
}
}

如何停止请求并在屏幕上显示错误消息?

1 个答案:

答案 0 :(得分:0)

Afaik您需要通过返回Response对象或在事件上调用stopPropagation(true)来使事件短路。这将阻止所有其他调度侦听器执行并将响应返回给客户端。

您可以尝试这样的事情:

public function mvcPreDispatch(MvcEvent $e)
{
    $authService = $e->getApplication()->getServiceManager()->get('auth');
    if($authService->isAuthenticated()) {
        return true;
    }

    $model = new JsonModel(array(
        'errors' => array(
            'httpCode' => $e->getResponse()->getStatusCode(),
            'title' => $e->getResponse()->getReasonPhrase(),
            'message' => 'Login necessário'
        )
    ));
    $e->setViewModel($model);
    $e->stopPropagation(true);
}