cakephp3- नियंत्रक के अंदर प्राधिकरण हैडर लाने में सक्षम नहीं है




cakephp-3.0 (2)

मैं CakePHP 3 ढांचे का उपयोग कर एक एपीआई विकसित कर रहा हूं। अब मैं POSTMAN ग्राहक से GET अनुरोध भेज रहा हूं उपयोगकर्ता हेडर में एपीआई कुंजी पास करेगा

मैं इस हेडर को अपने नियंत्रक समारोह में लाने चाहता हूं।

ऐसा मेरे नियंत्रक की तरह दिखता है

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

लेकिन यह भी इसी तरह की त्रुटि फेंक दिया हेडर फ़ंक्शन नहीं है

संदर्भ: लिंक

केकपीएचपी संस्करण: 3.3.5


जैसा कि @ एनएम ने ओपी टिप्पणियों में कहा, लिंक किए गए डॉक्टर का अंतिम उदाहरण आपकी समस्या को हल करना चाहिए। आप 3.4 से पहले एक संस्करण का उपयोग कर रहे हैं ताकि आपको इसका उपयोग करना होगा:

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

HTTP हेडर पढ़ने के लिए दस्तावेज़ का पुन: प्राप्त करें

यहां बताया गया है कि "आपको अनुरोध के लिए उपयोग किए जाने वाले किसी भी HTTP_ * हेडर तक पहुंचने की अनुमति देता है"। इसका मतलब यह है कि जैसे ही http हेडर पढ़ता है

  • HTTP अनुरोध
  • मेज़बान
  • संबंध
  • अपग्रेड-असुरक्षित-अनुरोध
  • उपभोक्ता अभिकर्ता
  • स्वीकार करना
  • Accept-Encoding
  • स्वीकार करें-भाषा

साथ ही यह भी उल्लेख किया गया है कि "कुछ अपाचे अधिष्ठापन प्राधिकरण शीर्षलेख सुलभ नहीं होने पर, केपीएचएचपी आवश्यकतानुसार अपाचे विशिष्ट विधियों के माध्यम से इसे उपलब्ध कराएगा।"

तो समाधान के लिए

वे सभी अलग-अलग अस्पष्ट सेटिंग्स हैं, जो आप इस व्यवहार को उलटा करने के लिए ज़ूम कर सकते हैं, लेकिन आपको यह निर्धारित करने की आवश्यकता होगी कि कौन सा मॉड्यूल दोष है।

आप env के माध्यम से सीधे PHP पर हेडर पास करके इस समस्या को हल कर सकते हैं:

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

इसके अलावा जनमत: ज़ेंड सर्वर विंडोज - प्राधिकरण हैडर PHP स्क्रिप्ट के लिए नहीं भेजा गया है