Я пытаюсь сделать вызов api из одного из моих проектов laravel другому, используя новую функцию oauth2 в laravel 5.3.
У меня есть этот маршрут в файле маршрута api.php моего нового проекта laravel, который я хочу вызвать из старого:
Route::get('/hello', function() { return 'hello'; })->middleware('auth:api');
Без промежуточного программного обеспечения я могу назвать его без проблем, с промежуточным программным обеспечением, он выдает ошибку 404, не найденную.
Вот код, который извлекает токен доступа, а затем вызывает вызов api:
$http = new GuzzleHttp\Client; $response = $http->post('http://my-oauth-project.com/oauth/token', [ 'form_params' => [ 'grant_type' => 'client_credentials', 'client_id' => 'client_id', 'client_secret' => 'client_secret', ], ]); $token = json_decode($response->getBody(), true)['access_token']; $response = $http->get('http://my-oauth-project.com/api/hello', [ 'headers' => [ 'Accept' => 'application/json', 'Authorization' => 'Bearer '.$token, ], ]); return $response->getBody();
Возвращаемая ошибка:
[2016-10-14 09:46:14] local.ERROR: exception 'GuzzleHttp\Exception\ClientException' with message 'Client error: `GET http://my-oauth-project.com/api/hello` resulted in a `404 Not Found` response: <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <meta name="robots" content="noindex,nofollow (truncated...)
Средство «auth: api» промежуточного программного обеспечения автоматически перенаправляет запрос на страницу входа (которая в этом случае не существует, следовательно, ошибка 404).
Учетные данные для учетных данных клиента не требуют входа в систему. Документация для него еще не опубликована, но промежуточное ПО существует .
Чтобы использовать его, создайте новое промежуточное программное обеспечение под переменной $routeMiddleware
в app\Http\Kernel.php
например:
protected $routeMiddleware = [ 'client_credentials' => \Laravel\Passport\Http\Middleware\CheckClientCredentials::class, ];
Затем добавьте это промежуточное программное обеспечение в конец маршрута:
Route::get('/hello', function() { return 'hello'; })->middleware('client_credentials');
Это то, что сработало для меня.