2017-04-04 17 views
5

CakePHP 3 framework'ü kullanarak bir API geliştiriyorum. Şimdi POSTMAN istemcisinden bir GET isteği gönderiyorum. Kullanıcı başlıkta bir API anahtarı geçirecektir. enter image description herecakephp3- denetleyici içinde yetkilendirme üstbilgisini getiremiyor

Bu üstbilgiyi denetleyici işlevimde almak istiyorum. Benim denetleyicisi

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

nasıl göründüğünü

Bu alıyorum hatadır:

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

ancak bu da attı: HeaderLine is not a function

Ayrıca bazı daha fazla seçenek çalıştı benzer bir hata. Üstbilgi bir işlev değildir.

Referans: Link

CakePHP'nin sürümü: 3.3.5

+0

hep 'satıcı/CakePHP'de sizin _exact_ CakePHP sürümü (son satırı belirtin/cakephp/VERSION.txt') - teşekkürler! – ndm

+0

Cakephp 3.3.5 @ndm –

+1

Ardından, bağlı dokümanlarda son örneğe daha yakından bakmak isteyebilirsiniz. – ndm

cevap

3

@ndm OP yorumlarında söylediği gibi, bağlantılı doc son örneği sorunu çözmek gerekir.

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

Oh! Bu yorumu fark etmedi. –

1

refere belge

Burada

"Eğer HTTP_ isteği için kullanıldı * başlıkları herhangi erişmesini sağlar" belirtti Reading HTTP Header için: Öyle kullanmak zorunda önce 3.4 sürümü kullanıyor . o

  • HTTP İsteği
  • Sunucu
  • Bağlantı
  • Yükseltme-Güvensiz-İstekler
  • User-Agent
  • -Kabul Kodlama Kabul gibi sadece http başlıklarını okur Anlamı Kabul Etme Dili

Ayrıca, "Bazı apache yüklemeleri Yetkilendirme üstbilgisini erişilebilir yapmazken, CakePHP gerektiği gibi apache'ye özgü yöntemlerle kullanılabilir hale getirecektir."

Yani Çözüm

için hepsi bu davranışı hükümsüz çimdik farklı belirsiz ayarlara sahip, ancak sorumlu olduğu hangi modül tam olarak belirlemek gerekir.

Sen env yoluyla PHP doğrudan başlığını geçirerek bu soruna geçici bir çözüm olabilir:

Ayrıca
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1 

refere: Zend Server Windows - Authorization header is not passed to PHP script

İlgili konular