3

我正在使用League\oauth2-server并且在使用GEThttp 动词时它可以正常工作。

但是,当PUT我提出请求时,我受到了打击

调用未定义的方法 League\OAuth2\Server\Util\Request::PUT()

引发此错误的特定代码是函数Server/Resource.php 文件

$accessToken = $this->getRequest()->{$method}($this->tokenKey);

从函数

protected function determineAccessToken($headersOnly = false)
{
    if ($header = $this->getRequest()->header('Authorization')) {
        // Check for special case, because cURL sometimes does an
        // internal second request and doubles the authorization header,
        // which always resulted in an error.
        //
        // 1st request: Authorization: Bearer XXX
        // 2nd request: Authorization: Bearer XXX, Bearer XXX
        if (strpos($header, ',') !== false) {
            $headerPart = explode(',', $header);
            $accessToken = trim(preg_replace('/^(?:\s+)?Bearer\s/', '', $headerPart[0]));
        } else {
            $accessToken = trim(preg_replace('/^(?:\s+)?Bearer\s/', '', $header));
        }
        $accessToken = ($accessToken === 'Bearer') ? '' : $accessToken;
    } elseif ($headersOnly === false) {
        $method = $this->getRequest()->server('REQUEST_METHOD');
        $accessToken = $this->getRequest()->{$method}($this->tokenKey);
    }

    if (empty($accessToken)) {
        throw new Exception\InvalidAccessTokenException('Access token is missing');
    }

    return $accessToken;
}

我正在使用 POSTMAN 请求客户端来测试请求 邮递员请求

4

2 回答 2

0

它抛出该错误是因为不允许对 Web 服务的 PUT 请求。这是有道理的,因为您真的永远不需要为 OAuth2 请求执行 PUT 请求。PUT 告诉另一端的 RESTful 服务您正在尝试更新特定实体。OAuth2 没有要更新的实体,只能检索。

也许更好地理解您正在尝试做的事情可能会解释您为什么使用 PUT,但对于 OAuth2,它应该始终是 GET 请求。

于 2013-09-20T05:49:12.757 回答
0

如果您将“http_headers_only”设置为 true 并在正确的标头中发送令牌,它应该可以工作。

通过正确的 HTTP 标头,我的意思是“授权:承载”而不是 access_token:可以在您的邮递员屏幕截图中看到。另请注意,“Authorization”是键,值由“Bearer”关键字和您的令牌组成,以空格字符分隔。

于 2014-05-14T13:55:17.370 回答