我在项目中使用Laravel Passport身份验证。我想仅在API中使用护照身份验证,因此我尝试使用以下代码生成client_id
和client_secret
,但它会返回NULL
我已经在我的routes / api.php
中编写了这段代码Route::post('/gen_client', function () {
$http = new GuzzleHttp\Client([
'headers' => [ 'Content-Type' => 'application/json' ]
]);
$response = $http->post(url('/') . '/oauth/clients',
['body' => json_encode(
[
'id' => 'ovais.khan@gmail.com',
'name' => 'Ovais2',
'redirect' => url('/') . '/callback'
]
)
]
);
$response_body = json_decode((string)$response->getBody(), true);
var_dump($response_body);
});
假设我使用命令行生成client_id
<{1}}
现在我想授权访问令牌,但它返回NULL
php artisan passport:client
Route::post('callback', function (Request $request) {
$http = new GuzzleHttp\Client();
$oauth_client = DB::table('oauth_clients')->where('id', '=', 'ovais.khan@gmail.com')->first();
$response = $http->post(url('/') . '/oauth/token', [
'form_params' => [
'grant_type' => 'authorization_code',
'client_id' => $oauth_client->id,
'client_secret' => $oauth_client->secret,
'redirect_uri' => url('/') . '/callback',
'code' => $request->code,
],
]);
$response_body = json_decode((string)$response->getBody(), true);
var_dump($response_body);
$access_token = $response_body['access_token'] ;
$refresh_token = $response_body['refresh_token'];
});
向我发送输出信息:
dd(url('/') . '/oauth/clients');
http://localhost/project/public/oauth/clients
向我发送输出信息:
dd($response);
任何人都可以帮助我吗? 等待积极的回应。
答案 0 :(得分:0)
我的团队负责人已经解决了这个问题。请查看以下链接:
答案 1 :(得分:-1)
你为$ response_body获取NULL的原因是当你设置变量时你输入了$ response-&gt; getBody()作为字符串,你实际得到的是Stream的一个实例。你也试图json_decode一个类,而不是json字符串。 $response_body = json_decode((string)$response->getBody(), true);
如果您想要JSON回复,可以执行$response_body = $response->json();
有关更多信息,GuzzleHttp文档的这些部分将非常有用: http://guzzle3.readthedocs.io/http-client/response.html#response-body和http://guzzle3.readthedocs.io/http-client/entity-bodies.html