Le passeport 5.3 de Laravel et les routes api

Je suis en utilisant le Framework Laravel version 5.3.9, frais de téléchargement de rien ajouté sur via composer(à l'exception de "laravel/passport": "^1.0").

J'ai fait toutes les choses que suggéré dans le docs. Les Tables sont créées, les routes sont en place, tout fonctionne bien. Cependant j'ai besoin de passeport pour une API.

Mes parcours ressemble à:

+--------+----------+-----------------------------------------+----------------------+----------------------------------------------------------------------------+------------+
| Domain | Method   | URI                                     | Name                 | Action                                                                     | Middleware |
+--------+----------+-----------------------------------------+----------------------+----------------------------------------------------------------------------+------------+
|        | GET|HEAD | /                                       |                      | Closure                                                                    | web        |
|        | GET|HEAD | api/v1/users/register                   | api::users::register | App\Http\Controllers\Api\V1\SocialController@register                      | api,auth   |
|        | POST     | oauth/authorize                         |                      | \Laravel\Passport\Http\Controllers\ApproveAuthorizationController@approve  | web,auth   |
|        | GET|HEAD | oauth/authorize                         |                      | \Laravel\Passport\Http\Controllers\AuthorizationController@authorize       | web,auth   |
|        | DELETE   | oauth/authorize                         |                      | \Laravel\Passport\Http\Controllers\DenyAuthorizationController@deny        | web,auth   |
|        | GET|HEAD | oauth/clients                           |                      | \Laravel\Passport\Http\Controllers\ClientController@forUser                | web,auth   |
|        | POST     | oauth/clients                           |                      | \Laravel\Passport\Http\Controllers\ClientController@store                  | web,auth   |
|        | PUT      | oauth/clients/{client_id}               |                      | \Laravel\Passport\Http\Controllers\ClientController@update                 | web,auth   |
|        | DELETE   | oauth/clients/{client_id}               |                      | \Laravel\Passport\Http\Controllers\ClientController@destroy                | web,auth   |
|        | GET|HEAD | oauth/personal-access-tokens            |                      | \Laravel\Passport\Http\Controllers\PersonalAccessTokenController@forUser   | web,auth   |
|        | POST     | oauth/personal-access-tokens            |                      | \Laravel\Passport\Http\Controllers\PersonalAccessTokenController@store     | web,auth   |
|        | DELETE   | oauth/personal-access-tokens/{token_id} |                      | \Laravel\Passport\Http\Controllers\PersonalAccessTokenController@destroy   | web,auth   |
|        | GET|HEAD | oauth/scopes                            |                      | \Laravel\Passport\Http\Controllers\ScopeController@all                     | web,auth   |
|        | POST     | oauth/token                             |                      | \Laravel\Passport\Http\Controllers\AccessTokenController@issueToken        |            |
|        | POST     | oauth/token/refresh                     |                      | \Laravel\Passport\Http\Controllers\TransientTokenController@refresh        | web,auth   |
|        | GET|HEAD | oauth/tokens                            |                      | \Laravel\Passport\Http\Controllers\AuthorizedAccessTokenController@forUser | web,auth   |
|        | DELETE   | oauth/tokens/{token_id}                 |                      | \Laravel\Passport\Http\Controllers\AuthorizedAccessTokenController@destroy | web,auth   |
+--------+----------+-----------------------------------------+----------------------+----------------------------------------------------------------------------+------------+

Tous les web itinéraires sont là, il n'y a pas api liées routes, depuis Passeport ne pas fournir quoi que ce soit de sortir de la boîte.

L'API en elle-même est destiné à être utilisé par un client de confiance, c'est fait pour une application mobile qui nécessite un login cependant, dit que la connexion sera de contourner quelques étapes.

Une fois qu'un utilisateur l'accès au /register route, le processus d'enregistrement lui-même est assez simple: l'accès de l'utilisateur, facebook compte un prendre un peu de champs - mail, facebook id, nom d'une photo de profil et à partir de là, les utilisateurs est considéré comme enregistré. Mais l'utilisateur PAS connexion avec facebook(ce qui est un aspect très important). Le consommateur de l'application sera délivré un jeton et utiliser le jeton d'accéder à divers paramètres de l'api(qui nécessitent un jeton à utiliser).

De sorte qu'il se résume à ceci. J'ai besoin d'émettre un jeton d'accès pour le consommateur application que l'accès à l'API. L'API en elle-même n'ont qu'un seul client, c'est l'application mobile lui-même. Les utilisateurs qui utilisent l'application ne sont pas considérés comme des clients de l'API, mais les clients de l'application mobile lui-même.

Jusqu'à présent, le Passeport est un mal de tête à travailler avec quand il s'agit de la mise en œuvre de l'API liées à des trucs, c'est ça ou je ne peux pas comprendre comment le faire fonctionner correctement.

J'ai créé un client de test dans le oauth_clients table qui ressemble à ceci:

Le passeport 5.3 de Laravel et les routes api

Je suis en utilisant le Facteur de l'accès api/v1/users/register l'itinéraire le auth middleware avec le suivant JSON application/json

{
"grant_type" : "authorization_code",
"client_id" : 5,
"client_secet": "y5dvPIOxQJOjYn7w2zzg4c6TRrphsrNFWbG4gAUL"
}

Qui, bien sûr, le résultat sera une

{"error":"Unauthenticated."}

Il a le sens parfait.
Par pure curiosité, j'ai changé le /register itinéraire:

Route::group([
'middleware' => [
],
], function ()
{
Route::group([
'prefix' => 'users',
'as'     => 'users::',
], function ()
{
//       Route::get('/register', ['as'   => 'register', 'uses' => 'Api\V1\SocialController@register',]);
Route::post('/register', ['as'   => 'register', 'uses' => '\Laravel\Passport\Http\Controllers\AccessTokenController@issueToken',]);
});
});

Avec la même json comme avant. Qui a abouti à {"error":"invalid_client","message":"Client authentication failed"}.

J'ai traqué la fonction qui, je pense, s'occupe de la validateClient partie dans vendor/ligueoauth2-serveur/src/Subvention/AbstractGrant`.

La $client est null. Maintenant, cela peut ou peut ne pas être liée à Passeport, étant donné que la documentation sur elle plutôt qui manque et la pensée de creuser à travers un monstre d'un paquet de traquer l'erreur qui peut être en grande partie en raison pour moi de ne pas faire quelque chose de bien ne me frappe pas comme une bonne idée, je suis d'options. Pour être parfaitement honnête, je ne sais même pas quel est le problème.

Vraiment, à ce point de toute sorte dans la bonne direction est plus que bienvenue.

La partie en question est

source d'informationauteur Andrew