【问题标题】:cakephp3- not able to fetch authorization header inside controllercakephp3-无法在控制器内获取授权标头
【发布时间】:2017-04-04 11:21:26
【问题描述】:

我正在使用 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

【问题讨论】:

  • 请务必提及您的 准确 CakePHP 版本(vendor/cakephp/cakephp/VERSION.txt 的最后一行) - 谢谢!
  • Cakephp 3.3.5 @ndm
  • 那么您可能需要仔细查看链接文档中的最后一个示例。

标签: php cakephp cakephp-3.0


【解决方案1】:

正如@ndm 在 OP cmets 中所说,链接文档中的最后一个示例应该可以解决您的问题。您使用的是 3.4 之前的版本,因此您必须使用:

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

【讨论】:

  • 哦!没注意到那条评论。
【解决方案2】:

参考Reading HTTP Header的文档

这里提到“允许您访问用于请求的任何 HTTP_* 标头”。意味着它只读取 http 标头,如

  • HTTP 请求
  • 主机
  • 连接
  • 升级不安全请求
  • 用户代理
  • 接受
  • 接受编码
  • 接受语言

还提到“虽然某些 apache 安装不会使 Authorization 标头可访问,但 CakePHP 会根据需要通过 apache 特定方法使其可用。”

所以解决方案

它们都有不同的模糊设置,您可以对其进行调整以推翻此行为,但您需要准确确定应归咎于哪个模块。

您可以通过 env 将标头直接传递给 PHP 来解决此问题:

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

另请参考:Zend Server Windows - Authorization header is not passed to PHP script

【讨论】:

    猜你喜欢
    • 2013-04-03
    • 2014-02-10
    • 2020-11-23
    • 2016-12-23
    • 1970-01-01
    • 2016-08-28
    • 2014-07-31
    • 2016-09-14
    • 2017-07-07
    相关资源
    最近更新 更多