#laravel #oauth #laravel-passport
#laravel #oauth #laravel-passport
Вопрос:
Я успешно устанавливаю passport api в laravel, я могу получить access_token, используя запрашивающие токены, такие как
Route::get('/redirect', function () {
$query = http_build_query([
'client_id' => '1',
'redirect_uri' => 'http://example.com/callback',
'response_type' => 'code',
'scope' => '',
]);
return redirect('http://localhost:8000/oauth/authorize?'.$query);
});
но когда я использую токены предоставления пароля, created by php artisan passport:client --password
используя имя пользователя и пароль,
Я получаю unsupported_grant_type
мой запрос,
$http = new GuzzleHttpClient;
$response = $http->post('http://localhost:8000/oauth/token', [
'form_params' => [
'grant_type' => 'password',
'client_id' => '3',
'client_secret' => 'sqgaA8HOBUZBBZwWnl4xhyDE7LWyhAhlG5BZa199',
'username' => 'myusername',
'password' => 'mypassword',
'scope' => '',
],
]);
return json_decode((string) $response->getBody(), true);
Я получаю ошибку, подобную этой;
{
"error": "unsupported_grant_type",
"message": "The authorization grant type is not supported by the authorization server.",
"hint": "Check the `grant_type` parameter"
}
моя таблица oauth_clients является,
id => 3
user_id => 1
name => Laravel Password Grant Client
secret => sqgaA8HOBUZBBZwWnl4xhyDE7LWyhAhlG5BZa199
redirect => http://localhost
personal_access_client => 0
password_client => 1
revoked => 0
created_at => 2019-03-27 15:46:10
updated_at => 2019-03-27 15:46:10
Комментарии:
1. Это не работает, когда я использую расширение restlet crome для публикации данных,
2. Ваш
client_id => '3'
должен бытьclient_id => 3
. Попробуйте удалить кавычки.3. мой запрос post — это localhost: 8000 /oauth / … * @Хари Харкер
4. В вашем запросе ваше
redirect_uri
естьhttp://example.com/callback
, но вoauth_clients
таблице оно естьhttp://localhost
. Измените его соответствующим образом и получите определение маршрута для вашего uri обратного вызова. Также убедитесь, чтоAPP_URL
установлен правильный uri приложения (http:\localhost или корневой uri вашего домена) в вашем.env
файле