J'ai fait une API REST avec Laravel et maintenant j'essaie de la consommer. Le problème est que je dois authentifier les utilisateurs dans l'API et j'utilise la méthode Password Grant . Je peux authentifier les utilisateurs correctement et je peux obtenir un jeton d'accès mais à partir de là, je ne vois pas de moyen de récupérer l'utilisateur authentifié avec le jeton d'accès dans mon application consommatrice.
J'ai essayé dans l'API avec un itinéraire comme celui-ci:
Route::get('/user', function(Request $request) {
$user = $request->user();
// Even with
$user = Auth::user();
return $user;
});
Pas de dé. Je lis le code du passeport mais je ne peux pas le comprendre. Je suppose que je devrais spécifier un nouveau type de garde ou quelque chose parce qu'il ne semble pas que Laravel Passport en fournit un pour ce type de type de subvention ...
Pour clarifier les choses:
Ou puis-je? Je peux peut-être étendre la méthode qui authentifie les demandes d'octroi de mot de passe pour relier le jeton d'accès généré à l'utilisateur qu'il authentifie ... * l'ampoule s'allume *
Code de test de l'application consommatrice:
try {
$client = new Client();
$result = $client->post('https://myapi.com/oauth/token', [
'form_params' => [
'grant_type' => 'password',
'client_id' => '5',
'client_secret' => 'my_secret',
'username' => 'user_I_am_authenticating',
'password' => 'the_user_password',
'scope' => '',
]
]);
$access_token = json_decode((string) $result->getBody(), true)['access_token'];
$result = $client->get('https://myapi.com/client/user', [
'headers' => [
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'Authorization' => "Bearer $access_token",
]
]);
return (string) $result->getBody();
} catch (GuzzleException $e) {
return "Exception!: " . $e->getMessage();
}
Notez que https://myapi.com/client/user l'itinéraire est juste un itinéraire que j'ai fait pour tests dans l'API. Cette route est définie comme:
Route::get('/user', function(Request $request) {
return $request->user();
});
Maintenant. Je sais que cela ne fonctionne pas. C'est ce que je veux réaliser. Connaître l'utilisateur qui fait la demande avec access_token/bearer_token.
Merci.
Vous avez oublié le middleware approprié.
Route::get('/user', function(Request $request) {
return Auth::user();
})->middleware('auth:api');
Le flux d'authentification n'est pas déclenché lorsque vous ne mentionnez pas le middleware auth
. C'est pourquoi vous obtenez null
.
J'ai eu le même problème avec toi. Et je l'ai résolu après avoir défini manuellement le garde d'authentification.
Route::get('/user', function (Request $request) {
return auth()->guard('api')->user();
});
Vous devez transmettre le jeton d'accès à chaque demande. Veuillez vérifier la documentation de cette partie ici