Получить данные пользователя с помощью токена доступа в клиентском приложении laravel passport

Я успешно создал server.app а также client.app с помощью Паспортная документация. Все работает как положено.

Маршрут client.app:

Route::get('callback', function (Request $request) {
$http = new GuzzleHttp\Client;
$response = $http->post('http://server.app/oauth/token', [
'form_params' => [
'grant_type' => 'authorization_code',
'client_id' => 3,
'client_secret' => 'secret',
'redirect_uri' => 'http://client.app/callback',
'code' => $request->code
]
]);
return json_decode((string) $response->getBody(), true)['access_token'];
});

По умолчанию этот маршрут возвращается access_token, с помощью которого я могу делать все, что захочу.

Запрос:

http://server.app/oauth/authorize?client_id=3&redirect_uri=http%3A%2F%2Fclient.app%2Fcallback&response_type=code&scope=

Возвращает:

http://client.app/callback?code=access_token

Вопрос:

Как правильно сделать запрос на server.app с данным access_token в client.app чтобы получить например пользователь (и) электронная почта.

Должен ли я использовать: http://server.app/api/user запросить данные? Если да, то как я могу это сделать? Если возможно, пожалуйста, напишите код.

Спасибо за любые ответы.

16

Решение

Я схожу с ума по этому вопросу! Это просто не имело смысла, почему он продолжал выплевывать глупые Unauthenticated ошибка при попытке подобрать маршрут, такой как /api/user, После долгих поисков (много поиска) я наконец нашел ответ. Если вы видите это fero из Laracasts, вы мой герой!

Ты проверил app\Providers\RouteServiceProvider.php ?

в mapApiRoutes() Вы можете установить промежуточный слой. проверить, чтобы убедиться
его auth:api, если нет, измените его. также удалите auth
промежуточный слой с маршрута api.php файл.

https://laracasts.com/discuss/channels/laravel/laravel-53-passport-api-unauthenticated-in-postman-using-personal-access-tokens

Редактировать:

После внесения изменений в app\Providers\RouteServiceProvider.php упомянутое выше, перейдите к следующему примеру.

Перво-наперво, нам нужно получить свежий access_token, Для этого я использую пароль grant_type (больше информации: https://laravel.com/docs/5.4/passport#password-grant-tokens)

Чтобы получить свежий access_tokenЯ создал новый маршрут на routes/web.php и назвал это /connect, Затем я поместил в него код из приведенной выше ссылки:

Route::get('connect', function (Request $request) {
$http = new GuzzleHttp\Client;

$response = $http->post('http://example.com/oauth/token', [
'form_params' => [
'grant_type' => 'password',
'client_id' => $request->client_id,
'client_secret' => $request->client_secret,
'username' => $request->username,
'password' => $request->password,
'scope' => ''
],
]);

return json_decode((string) $response->getBody(), true);
});

С помощью Хром Почтальон, вам нужно:

  1. Установите метод на GET
  2. Введите URL-адрес подключения с соответствующими параметрами, т.е. http://example.com/connect?client_id=1&client_secret = W2zogh7tiBh2jfHleYuzpViv7dqynDYQ6O07DKLj&username=test@test.com&пароль = 123456
  3. Нажмите на заголовки вкладка (это рядом с авторизацией), добавьте ключ Accept и значение application/json
  4. Нажмите кнопку Отправить

Пример результата:

{
"token_type": "Bearer",
"expires_in": 31535999,
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6ImE0MmFiYjZkNTQ5M2ZjMGQxYzVmM2E3MDFlOTNjMTRlOTQxMTBmNWQ5NmI1ODI0NTBmMmEyM2MwMzQ5OTMwODdiZGUwYTI5ZDU5N2VjYTExIn0.eyJhdWQiOiIxIiwianRpIjoiYTQyYWJiNmQ1NDkzZmMwZDFjNWYzYTcwMWU5M2MxNGU5NDExMGY1ZDk2YjU4MjQ1MGYyYTIzYzAzNDk5MzA4N2JkZTBhMjlkNTk3ZWNhMTEiLCJpYXQiOjE0OTE0Njg4ODIsIm5iZiI6MTQ5MTQ2ODg4MiwiZXhwIjoxNTIzMDA0ODgxLCJzdWIiOiI3NWNlZDUwMC0xNTQ0LTExZTctOWE4ZS1hZDVmMWFlZTM4OWUiLCJzY29wZXMiOltdfQ.dV3DKDM7IN-oGnZ_Rw10VnYkh9ySlz5i859yO0roZLAYwgmsmEEZK_vpttudUoKmYenqibZQXg6HG4KHRd-cgas_2DpO-7UCkXQYNTriUUAQ4XM6To86EOaf2BW1a07kdVGXTdo_ETQc7heUG0NWQ8-Hrr2NHkSyDULupDs8gDg_fg6xSVsFUEDZB32UIGwquAHT1Y21ZpTdQar0Rag9qOLeZYTR05ro0v9_rQbSoDgJiZE3KT9GbqwU_BegWRmAwY6LmxG4raZpSMgqYEMo3D9D0lJiomOLK4pSjqmi0EVti04zZ6Vg4GHE6S1TgC6IlakV2bMItXTWuZT6T0jEba-3ctaC4K2T8F4P8J6t-99mKY-_zSwgfGm1FErK09qixJlZ4zFsCCT7MgNQVoyu7GkJdTJVlpL1QXLc1QhfrtW11a4gg4Nlja_VyRdB9fZHomgMLpvm_HvSlqEvpeWb8wGkCts9w7ivSNLim-LuFgswGNhTZZqLEbuwB6sJV-l1V0MJCq7_h0yTmLlBdoUkxCaDJJvkUSLk0MUaalAAzY1OCxm-tJcKn31m4yOwf25ZDWf8tWuOTKarEbFyxjB0elkxXQXGe7J7TJAg0tuIEQ8YTL3ExJQ6I7zwtCL83bPOWYRGlJrsX6Lsf0qB-xMVD2DzA3JKDKvZTp5x92kP821",
"refresh_token": "ArOWW0glHjflLpL4fKOsrNUXT5v91u+CjwcE8LBvH7GJsaM0gWaFe8GH9zXjh8SHew+cg7v1IMiIPLYSVdf7h8oOeV7wgwjChI9YM0Kt6iE4wOXJuy0VwPSCj+danHDuWC3nJWYLrPydTE3h/jgFNjWEPfgXGLfiRWjWQMozddz5EWd4pvUI7J64Lw6cMCg/BslZLHtfN7IWoC1RQGp5K0cGO0QmZfsGMSzsoSUNFjv16BXiKSqlNvs5aGhxErFY4wEOKqBifXUkb3SwnK/iHKg3irmqj4fOf/aKNyCdd/PJCHrRPocrW83oM1sjq7eDufEIlgxmy7uRset8GLAWjx/n6rzkxz2QM0/9Lyc/XN9OL00XBYjA47a1wL55qUUUYWevaFwxWX8LG2UjBf9Vv2lfvLcBBkbgqpalePMDh6wb8IDyJek4BbvZtJ1VZ/l+A9XXY9rQt/hIDdoOAtib8CGr9/CERFIrByZa3TEJBCLAa2FvJSIhHVnKvnuvZX3e9qhTkgHqowJrWg2C3VyPDQYAdIhdpTEvs0pcGSAZWhwXfu9xKQOeyRTEScbLKQmuW+sGbwU+qfdLgh/BR5kW4TMer4TIzWKSuHsqmibgiUwaQkwTrtjH2Xz9Z9XmAbVzJ8pqbEZPe7t5whXDoRSnAwWymdxk2E7SiSsVUA3kX39="}

Выделить access_token строка и скопировать его в текстовый редактор.

Затем вам нужно будет создать новый маршрут в routes/api.php, Маршрут ниже просто выведет информацию о текущих пользователях API:

Route::group(['prefix' => 'user'], function() {
Route::get('/', function() {
return response()->json(request()->user());
});
});

После того как вы сделали выше, внесите эти изменения в Почтальон:

  1. Установите метод на GET
  2. Измените URL-адрес, чтобы он указывал на маршрут API, т.е. http://example.com/api/user
  3. Нажми на заголовки снова вкладку и добавьте новый ключ Authorization и значение Bearer access_token_here (заменить access_token_here с токеном доступа, который вы скопировали ранее)
  4. Нажмите кнопку Отправить

Пример вывода:

{
"id": "75ced500-1544-11e7-9a8e-ad5f1aee389e",
"name": "test test",
"email": "test@test.com",
"created_at": "2017-03-30 23:29:03",
"updated_at": "2017-03-30 23:29:03"}
31

Другие решения

Вы пробовали запустить его в приложении POSTMAN chrome?
Если нет, загрузите его. https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop?hl=en

Заполните информацию.
введите описание изображения здесь

После того, как вы успешно сгенерировали данные, нажмите кнопку CODE в правом верхнем углу (я выделил это зеленым цветом).

Наконец, выберите ваш язык и скопируйте код. Для PHP я выбрал php cURL.

Надеюсь, что это работает.

4

По словам Ларавела документация, Вы должны добавить маршрут к приложению сервера (routes/api.php): $response->getBody();

Route::get('/user', function () {
// authenticated user. Use User::find() to get the user from db by id
return app()->request()->user();
})->middleware('auth:api');

Сделайте запрос через quzzle:

$response = $client->request('GET', '/api/user', [
'headers' => [
'Accept' => 'application/json',
'Authorization' => 'Bearer '.$accessToken,
],
]);
echo $response->getBody();
2
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector