Я использую Laravel Passport Authentication в моем проекте. Я хочу использовать паспортную аутентификацию только в API, поэтому я пытаюсь сгенерировать client_id
а также client_secret
используя код ниже, но он возвращает NULL
Я написал этот код в моих маршрутах / 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' => '[email protected]',
'name' => 'Ovais2',
'redirect' => url('/') . '/callback'
]
)
]
);
$response_body = json_decode((string)$response->getBody(), true);
var_dump($response_body);
});
Предположим, если я сгенерировал client_id
используя командную строку php artisan passport:client
Теперь я хочу авторизованный токен доступа, но он возвращает NULL
Route::post('callback', function (Request $request) {
$http = new GuzzleHttp\Client();
$oauth_client = DB::table('oauth_clients')->where('id', '=', '[email protected]')->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);
пришлите мне вывод:
Response {#224
-reasonPhrase: "OK"-statusCode: 200
-headers: array:7 [
"Date" => array:1 [
0 => "Sat, 29 Oct 2016 10:19:24 GMT"]
"Server" => array:1 [
0 => "Apache/2.4.23 (Win32) OpenSSL/1.0.2h PHP/7.0.9"]
"X-Powered-By" => array:1 [
0 => "PHP/7.0.9"]
"Cache-Control" => array:1 [
0 => "no-cache"]
"Set-Cookie" => array:1 [
0 => "laravel_session=eyJpdiI6Ikx5WXJpTEFvZ0ZiNFwvbFwvYWZRQWxEZz09IiwidmFsdWUiOiJVM29lbTNYSnZwdld5ZHdVRk1IK1hJbG9RenNQa1owS1lRMEFYQ3lVamluV3JcL2RwaVQyRkpsZzkwQ082OU94QkJiSUpGQTZpeTMxWjdpMEtCZ1Byc3c9PSIsIm1hYyI6IjQwNTcwZTQ4YzQ2OGIwODQ5Y2NjMzBiMmIyNmI5MTVkNTY0ZjI0OGQ1Y2M1NTVjYTljNmU4Mjk2Nzg0Yjk2MmMifQ%3D%3D; expires=Sat, 29-Oct-2016 12:19:24 GMT; Max-Age=7200; path=/; HttpOnly"]
"Content-Length" => array:1 [
0 => "4709"]
"Content-Type" => array:1 [
0 => "text/html; charset=UTF-8"]
]
-headerNames: array:7 [
"date" => "Date""server" => "Server""x-powered-by" => "X-Powered-By""cache-control" => "Cache-Control""set-cookie" => "Set-Cookie""content-length" => "Content-Length""content-type" => "Content-Type"]
-protocol: "1.1"-stream: Stream {#222
-stream: stream resource @234
wrapper_type: "PHP"stream_type: "TEMP"mode: "w+b"unread_bytes: 0
seekable: true
uri: "php://temp"options: []
}
-size: null
-seekable: true
-readable: true
-writable: true
-uri: "php://temp"-customMetadata: []
}
}
Может кто-нибудь мне помочь?
Жду положительного ответа.
Мой руководитель команды решил эту проблему. Пожалуйста, проверьте ссылку ниже:
Причина, по которой вы получаете значение NULL для $ response_body, заключается в том, что, когда вы устанавливаете переменную, вы вводите в качестве строки подсказку $ response-> 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