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