2017-04-04 43 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']);   
    } 
} 

どのように見えるか

は、これは私が得ているエラーは、次のとおりです。

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

が、これも投げた:HeaderLine is not a function

は、私はまた、いくつかのより多くのオプションを試してみました同様のエラー。ヘッダーは関数ではありません。

参考: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

ため

REFERE文書がここで「あなたが要求のために使用されたヘッダ* HTTP_のいずれにもアクセスできるようにします」と述べました。それが唯一のHTTPヘッダー

    • HTTPリクエスト
    • ホスト
    • 接続
    • アップグレード-安全でない-要求
    • のUser-Agentなどが受け入れエンコード
    • を受け入れる読み出し、受諾 - 言語

    また、「一部のApacheインストールではAuthorizationヘッダーにアクセスできないが、CakePHPは必要に応じてApache固有の方法で利用できるようにする」とも述べている。

    だからソリューション

    のために彼らはすべてのあなたは、この動作を覆すために微調整することができます別のあいまいな設定を持っているが、あなたは責任があるどのモジュールを正確に判断する必要があります。

    あなたはenvを介して、PHPに直接ヘッダを渡すことによってこの問題を回避することができます

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

    またREFERE:Zend Server Windows - Authorization header is not passed to PHP script

    関連する問題