2017-04-04 74 views
5

我正在开发一个使用CakePHP 3框架的API。现在,我正在从POSTMAN客户端发送GET请求。用户将在标头中传递一个API密钥。 enter image description herecakephp3-无法在控制器中获取授权标头

我想在我的控制器功能中获取这个头文件。

这是我的控制器看起来像

namespace Api\Controller; 
use Cake\Auth\DefaultPasswordHasher; 
use Api\Controller\AppController; 
use Cake\Cache\Cache; 
use Cake\Http\ServerRequest; 

class ApiController extends AppController 
{ 
    public function initialize() 
    { 
     parent::initialize(); 
     $this->loadComponent('RequestHandler'); 
    } 

    public function myinfo() 
    { 
     if($this->request->is('get')) { 
      $key = $this->request->getHeaderLine('Authorization'); 
      $this->set('key', $key); 
     } 
     $this->set('_serialize', ['key']);   
    } 
} 

是我得到的错误是:HeaderLine is not a function

我也尝试了一些更多的选择:

$acceptHeader = $this->request->getHeader('Authorization'); 

但这也扔类似的错误。标题不是一个功能。

参考:Link

CakePHP的版本:3.3.5

+0

请总是提到你的_exact_ CakePHP的版本(最后一行'供应商/ cakephp中/ cakephp/VERSION.txt') - 谢谢! – ndm

+0

Cakephp 3.3。5 @ndm –

+1

然后,您可能需要仔细查看链接文档中的最后一个示例。 – ndm

回答

3

由于@ndm在OP评论说,在文档链接的最后一个例子应该解决您的问题。您使用的是之前的版本3.4,所以你必须使用:

// Prior to 3.4.0 
$key = $this->request->header('Authorization'); 
+0

哦!没有注意到那个评论。 –

1

参考,文档Reading HTTP Header

这里提到的“允许您访问任何HTTP_ *头被用于请求的” 。意味着它读起来就像只有HTTP头

  • HTTP请求
  • 主机
  • 连接
  • 升级不安全,请
  • 的User-Agent
  • 接受
  • 的Accept-Encoding
  • Accept-Language

还提到,“虽然有些Apache的安装不作Authorization头访问,CakePHP就会使其可通过Apache具体方法为必需的。”

所以解决方案

他们都有不同的晦涩的设置,您可以调整否决这种行为,但你需要确定到底哪个模块是难辞其咎的。

可以解决此问题由通过ENV直接传递头到PHP:

SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1 

而且参考,:Zend Server Windows - Authorization header is not passed to PHP script