ZF2 + Apigility + Oauth2单元测试

时间:2014-05-06 06:48:09

标签: php unit-testing rest zend-framework2 oauth-2.0

我正在尝试使用apigility对我的其余API进行一些单元测试,并使用OAuth2进行保护 (zfcampus / ZF-的oauth2)。身份验证和接收访问令牌完美无缺

$this->dispatch('/api/oauth', HttpRequest::METHOD_POST, array(
        'username' => 'username',
        'password' => 'password',
        'client_id' => 'web-app',
        'grant_type' => 'password'
    ), true);

    /** @var $response \Zend\Http\PhpEnvironment\Response */
    $response = $this->getResponse();
    $phpNative = \Zend\Json\Json::decode($response->getContent(), \Zend\Json\Json::TYPE_OBJECT);
    echo "\n".$phpNative->access_token."\n";
    $this->assertResponseStatusCode(200);

但是我尝试发送访问令牌并访问限制资源,我得到“拒绝访问”。发送“访问令牌”的正确方法是什么

1 个答案:

答案 0 :(得分:1)

您需要使用以下方法直接在测试中设置访问令牌:

$_SERVER['HTTP_AUTHORIZATION'] = 'Bearer asdfghjkl';

zf-mvc-auth模块使用bshaffer / oauth2-server-php / src / OAuth2 / Request.php来构建其承载令牌请求,该请求直接从环境中获取所有参数。因此,如果您只通过Zend的Http \ Header设置令牌,那么它将无法正常工作。例如:

$headers = new \Zend\Http\Headers;
$header = $headers->fromString("Authorization:Bearer asdfghjkl");
$this->getRequest()->setHeaders($header);