JWT:为什么我总是得到token_not_provided?

时间:2016-08-19 21:03:54

标签: jwt guzzle

我正在向我创建的API端点发送PUT请求。使用jwt,我能够成功注册并获得令牌。

使用Postman,我的请求完美无缺。

我在我的应用程序中使用Guzzle发送PUT请求。这就是它的样子:

$client = new \Guzzle\Http\Client('http://foo.mysite.dev/api/');
$uri = 'user/123';
$post_data = array(
    'token' => eyJ0eXAiOiJKV1QiLCJhbGc..., // whole token
    'name' => 'Name',
    'email' => name@email.com,
    'suspended' => 1,
);

$data = json_encode($post_data);

$request = $client->put($uri, array(
    'content-type' => 'application/json'
));

$request->setBody($data);
$response = $request->send();
$json = $response->json();

} catch (\Exception $e) {
    error_log('Error: Could not update user:');
    error_log($e->getResponse()->getBody());            
}

当我记录$data变量以查看它的外观时,这就是返回的内容。

error_log(print_r($data, true));

{"token":"eyJ0eXAiOiJKV1QiL...","name":"Name","email":"name@email.com","suspended":1}

Error: Could not suspend user:
{"error":"token_not_provided"}

似乎所有数据都正确填充,我不确定为什么系统没有找到令牌。运行"相同"通过Postman查询(作为PUT)以及相同的参数,效果很好。

非常感谢任何建议!

1 个答案:

答案 0 :(得分:0)

令牌应该在授权标头中设置,而不是作为后期数据参数

$request->addHeader('Authorization', 'Basic eyJ0eXAiOiJKV1QiL...');