2016-10-27 4 views
0

Я использую API аутентификации Passport в Laravel 5.3. Я создал два маршрута для генерации oauth-клиентов и второй для запроса access_token. Но я получаю значение NULL от /gen_client и показываю страницу входа с /redirect.Проблема при создании Oauth Client и запрос доступа к токену через код в Laravel Passport

Может ли кто-нибудь помочь мне в этом?

Route::get('/gen_client', function() { 
    $http = new GuzzleHttp\Client();  
    $response = $http->post(url('/') . '/oauth/clients', [   
     'form_params' => [ 
      'id' => '[email protected]', 
      'name' => 'OK', 
      'redirect' => url('/') . '/callback' 
     ], 
    ]); 
    $response_body = json_decode((string)$response->getBody(), true); 
    var_dump($response_body); 
}); 

Route::get('/redirect', function() { 
    $oauth_client = DB::table('oauth_clients')->where('id', '=', '[email protected]')->first(); 
    $query = http_build_query([ 
     'client_id' => $oauth_client->id, 
     'redirect_uri' => $oauth_client->redirect, 
     'response_type' => 'code', 
     'scope' => '', 
    ]); 

    return redirect(url('/') . '/oauth/authorize?'.$query); 
}); 

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']; 
} 

);

+0

Ваш маршрут gen_client не возвращает ничего, поэтому 'NULL'. Кроме того, параметр 'id' не используется. – datashaman

ответ

0

Ваш gen_client маршрут ничего не возвращает, поэтому он вернет NULL.

Вы также немного сбиваете с толку, пытаясь представить свой собственный ID и непосредственно использовать таблицу oauth_clients.

Вызов POST/OAuth/клиенты будут возвращать полезную нагрузку, которая включает в себя клиент ID и Secret.

Вы затем поместить эти значения в конфигурации где-нибудь, и использовать их как это (наряду с другими параметрами, необходимыми для вызова вы делаете):

[ 
    'client_id' => config('services.myoauth.client_id'), 
    'client_secret' => config('services.myoauth.client_secret'), 
] 

Не доступ к oauth_clients таблиц непосредственно , это работа OAuth.

Создание клиентов (обычно) вручную, что делается после при подключении клиента OAuth webapp к серверу OAuth.