2017-04-04 34 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