Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rest slimframework请求->;标题不´;不读取授权_Rest_Http Headers_Authorization_Slim - Fatal编程技术网

Rest slimframework请求->;标题不´;不读取授权

Rest slimframework请求->;标题不´;不读取授权,rest,http-headers,authorization,slim,Rest,Http Headers,Authorization,Slim,我正在尝试用服务器端的slim和客户端的angularJS实现一个简单的授权。为了测试RESTAPI,我使用了一个名为REST For Mac的程序,该程序允许发送REST调用 一旦授权完成,我想在每次rest调用时提供一个jwt令牌,它可以在slim中用于授权特定路径的请求 现在我通过以下标题和正文进行交付: Accept: */* Accept-Encoding: gzip, deflate Content-Type: application/json Authorization: j

我正在尝试用服务器端的slim和客户端的angularJS实现一个简单的授权。为了测试RESTAPI,我使用了一个名为REST For Mac的程序,该程序允许发送REST调用

一旦授权完成,我想在每次rest调用时提供一个jwt令牌,它可以在slim中用于授权特定路径的请求

现在我通过以下标题和正文进行交付:

Accept: */* 
Accept-Encoding: gzip, deflate 
Content-Type: application/json 
Authorization: jwt-test 
Accept-Language: de-de

{ 
  "login": "TestLogin", 
  "password": "TestPassword", 
  "uuid": "dsfglj45690dfgkl456" 
}
而不仅仅是打印整个页眉:

Slim\Http\Headers Object ( [data:protected] => Array ( [Host] => localhost:8888 
[Content-Type] => application/json [Content-Length] => 89 [Connection] 
=> keep-alive [Accept] => */* [User-Agent] => Rested/2009 CFNetwork/673.4 
Darwin/13.4.0 (x86_64) (iMac13%2C2) [Accept-Language] => de-de [Accept-Encoding] 
=> gzip, deflate ) )
如您所见,此阵列中没有授权

我还直接用firefox检查了这一点,结果相同。O可以通过firebug在请求头中看到授权字符串,但它不在slimframework的转储数组中

有人知道我的问题在哪里吗

提前感谢并致以亲切的问候

索里克问题 基本身份验证头应该如下所示

Authorization: Basic cm9vdDp0MDBy
Basic后面的字符串是通过将用户名和密码组合成类似于
username:password
的字符串来构造的。然后使用base64对结果字符串进行编码

您正在将标头发送到PHP不会解析的Web服务器。不确定这是bug还是特性

Authorization: jwt-test 
解决方案 如果将以下内容添加到.htaccess文件,则使用当前版本的Slim

SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
然后,您甚至可以使用其中任何一个访问非标准标头

var_dump($_服务器[“HTTP_授权]);
var_dump(apache_请求_头()[“授权”]);
变量转储($app->request->headers(“授权”);
它给出了以下结果:

string 'jwt-test' (length=8)
string 'jwt-test' (length=8)
string 'jwt-test' (length=8)

您还可以使用一些其他标题名,例如
X-Authorization

,因为我也很难做到这一点,下面是我发现的内容,如前所述,无需向.htaccess文件添加任何内容

$request->getHeader(“授权”);

如何添加登录标题?您共享的内容看起来像请求正文,而不是标题。另外,顺便说一句,无论是在请求头中还是在其他地方,以纯文本形式发送密码都是一个非常糟糕的主意。不,我稍后将使用jwt,它只是用于测试。我只将授权添加到标题中,而不是更多。如您所见,如果header对象是Slim\Http\headers,请共享一个代码示例,显示如何设置这些头。我们可以更好地帮助您。正如我所描述的,我使用一个mac程序进行了测试,该程序通过使用值“jwt-test”定义头字段“Authorization”来生成RESTAPI调用。第二个测试是在我的angularjs应用程序中,我使用拦截器向每个请求添加授权头:config.headers.Authorization='Bearer'+$window.sessionStorage.tokenUUID;我也有类似的问题。你能查一下Hi Mika吗?谢谢你的解释。据我所知,Apache是否希望接受授权值的特殊格式?你能在定义的地方分享一些链接吗?我在angularJS应用程序中尝试了config.headers.Authorization='Bearer'+$window.sessionStorage.tokenUUID;但是当我转储headers对象时,仍然看不到授权字段。谢谢Mika。不幸的是,因为另一个项目,我不得不停下来。我希望下周我能回到这个项目,并尝试实施你的解决方案。@Mika Tuuplola我尝试了你的答案,但没有成功。打印所有标题不会显示授权标题。我正在使用nginx