php cakephp cakephp-3.0

cakephp3- no puede buscar el encabezado de autorización dentro del controlador



cakephp-3.0 (2)

Estoy desarrollando una API usando el framework CakePHP 3. Ahora estoy enviando una solicitud GET del cliente POSTMAN. El usuario pasará una clave API en el encabezado.

Quiero buscar este encabezado en mi función de controlador.

Así es como se ve mi controlador

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

El error que estoy obteniendo es: HeaderLine is not a function

También probé algunas opciones más:

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

pero esto también arrojó un error similar. El encabezado no es una función.

Referencia: Enlace

Versión de CakePHP: 3.3.5


Como dijo @ndm en los comentarios de OP, el último ejemplo en el documento vinculado debería resolver su problema. Está utilizando una versión anterior a la 3.4, por lo que debe usar:

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


Refere document para leer el encabezado HTTP

Aquí mencioné que "te permite acceder a cualquiera de los encabezados HTTP_ * que se usaron para la solicitud". Significa que solo lee encabezados http como

  • Solicitud HTTP
  • Anfitrión
  • Conexión
  • Solicitudes de actualización inseguras
  • Agente de usuario
  • Aceptar
  • Aceptar-Codificar
  • Aceptar Idioma

También mencionó que "si bien algunas instalaciones de Apache no hacen accesible el encabezado de Autorización, CakePHP lo pondrá a disposición mediante métodos específicos de apache según sea necesario".

Entonces, para la solución

Todos ellos tienen diferentes configuraciones oscuras que puedes modificar para anular este comportamiento, pero tendrás que determinar exactamente qué módulo es el culpable.

Puede solucionar este problema pasando el encabezado directamente a PHP a través del env:

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

También Refere: Servidor Zend Windows - El encabezado de autorización no se pasa al script PHP