我正在使用CakePHP 3框架开发API。现在我从POSTMAN客户端发送GET请求。用户将在标头中传递API密钥。
我想在控制器功能中获取此标题。
这就是我的控制器的样子
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');
但这也引发了类似的错误。标题不是函数。
参考:Link
CakePHP版本: 3.3.5
答案 0 :(得分:3)
正如@ndm在OP评论中所说,链接文档中的最后一个示例应该可以解决您的问题。您使用的是3.4之前的版本,因此您必须使用:
// Prior to 3.4.0
$key = $this->request->header('Authorization');
答案 1 :(得分:2)
这里提到“允许您访问用于请求的任何HTTP_ *标头”。意味着它只读取像
这样的http标题还提到“虽然某些apache安装不能使Authorization标头可访问,但CakePHP将根据需要通过apache特定方法使其可用。”
所以对于解决方案
它们都有不同的模糊设置,你可以通过调整来否决这种行为,但是你需要准确确定应该归咎于哪个模块。
您可以通过env:
直接将标头传递给PHP来解决此问题SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
同样参考:Zend Server Windows - Authorization header is not passed to PHP script