#php #laravel #oauth
#php #laravel #oauth
Вопрос:
Для приложения я создал кучу микросервисов и шлюз. Шлюз получает запрос и собирает данные из giroservices. Все работает нормально.
Шлюз принимает все запросы и проверяет их подлинность с помощью Laravel Passport. Итак, на шлюзе установлен Laravel Passport.
[gateway]/users/login accepts the login parameters:
[users]/users/verify login details and returns user object. All works fine.
UserController.php
public function login(Request $request){
$rules = [
'email' => 'required|email:rfc',
'password' => 'required|min:8',
];
$user = $this->userService->verifyUser(['email'=> $request->email, 'password'=> $request->password]);
return $this->successResponse(['token'=>$token], Response::HTTP_OK);
}
$user
Имеет полный пользовательский json, включая UUID. Я хочу прикрепить этот UUID Laravel Passports OAuth. Так что, когда пользователь проходит аутентификацию, я могу абстрагировать пользовательский UUID и использовать его для следующих запросов.
{"data":{"uuid":"94b55bed-f084-468a-a2a7-51d38e96aed3","first_name":"John","last_name":"Due","locale":"en","email":"JohnDoe@mail.com","created_at":"2020-12-10T09:40:46.000000Z","updated_at":"2020-12-10T09:40:46.000000Z"}}
Очевидно, я понимаю, что json_decode это, но как вручную создать токен доступа в Laravel Passport. Как бы я это сделал?
Ответ №1:
Вы можете создать токен доступа, используя предоставленные паролем client_id и client_secret вместе с учетными данными пользователя. Вы можете сделать это, используя маршрут /oauth/token в службе, которая содержит логику passport .
Здесь из документации
Creating A Password Grant Client
Before your application can issue tokens via the password grant, you will need to create a password grant client. You may do this using the passport:client Artisan command with the --password option. If you have already run the passport:install command, you do not need to run this command:
php artisan passport:client --password
Requesting Tokens
Once you have created a password grant client, you may request an access token by issuing a POST request to the /oauth/token route with the user's email address and password. Remember, this route is already registered by the Passport::routes method so there is no need to define it manually. If the request is successful, you will receive an access_token and refresh_token in the JSON response from the server:
use IlluminateSupportFacadesHttp;
$response = Http::asForm()->post('http://passport-app.com/oauth/token', [
'grant_type' => 'password',
'client_id' => 'client-id',
'client_secret' => 'client-secret',
'username' => 'taylor@laravel.com',
'password' => 'my-password',
'scope' => '',
]);
return $response->json();
который можно найти здесь.
https://laravel.com/docs/8.x/passport#creating-a-password-grant-client