我在 PHP/Phalcon 中实现了 JWT 令牌,您需要在授权标头中发送 JWT 令牌。我按如下方式发送标头:
$.ajax({
url: URL,
dataType: 'text',
method: 'post',
data: { "data": "values" },
success: function(data) {
return console.log("Returned data: ", data);
},
beforeSend: function(xhr, settings) {
xhr.setRequestHeader('Authorization', 'Bearer ' + token);
});
要阅读标题,我执行以下操作:
$auth_header = $request->getHeader ( 'Authorization' );
仅此而已。我能够成功地阅读标题,生活继续。
几天后,我的代码无法读取标头。$auth_header 的值为空。经过一些诊断,我发现标题需要按如下方式读取:
$auth_header = $request->getHeader ( 'REDIRECT_HTTP_AUTHORIZATION' );
我将这两个参数添加到我的代码中,以便可以读取两个标头,具体取决于实际出现的标头。几天后,我添加了第三个:
$auth_header = $request->getHeader ( 'AUTHORIZATION' );
这一次这个词必须全是大写的,否则它什么都读不出来。
那现在怎么办?几天后会有第四个名字吗?我应该怎么做?我想指出的是,这些都没有发生在 PHP 5.6 上。它只发生在 PHP 5.3 的开发服务器上。这是一个已知问题吗?根本原因是什么?
我的.htaccess文件是:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^((?s).*)$ index.php?_url=/$1 [QSA,L]
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]
</IfModule>
我正在检查标题是否使用 Phalcon 的 hasServer 函数设置了标题
if($request->hasServer('HTTP_AUTHORIZATION')){
$jwt = $request->getServer('HTTP_AUTHORIZATION')
.....
}