2017-08-30 2 views
1

En utilisant Laravel (5.4) + Passeport (4.0) J'essaie d'implémenter une autorisation oAuth pour mon API. Obtenir le jeton n'est pas un problème, mais dès que j'accède à la ressource voulue au http://somedomain.tld/api/user je suis en quelque sorte jeté au formulaire de connexion web. Ma demande contient tous les en-têtes nécessaires comme:Laravel + Passeport - pourquoi "auth: api" m'envoie-t-il au formulaire de connexion?

[{"key":"Authorization","value":"Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6ImYxODk3ZmVhODIyOGQ0ZGY5MzU0ODI3NThiZTdlMmU0NTVjN2NkMzExMjc5OTdhMzU3NTQ3ZDQ5NzhhYTVmNjdjMTc5NmVlNTVjZGE4OTIyIn0.eyJhdWQiOiIxIiwianRpIjoiZjE4OTdmZWE4MjI4ZDRkZjkzNTQ4Mjc1OGJlN2UyZTQ1NWM3Y2QzMTEyNzk5N2EzNTc1NDdkNDk3OGFhNWY2N2MxNzk2ZWU1NWNkYTg5MjIiLCJpYXQiOjE1MDQxMTAzNzMsIm5iZiI6MTUwNDExMDM3MywiZXhwIjoxNTA1NDA2MzczLCJzdWIiOiIiLCJzY29wZXMiOltdfQ.WadULiSlQBJtG2Ixag8kGyI82UdXxHBGRWVJEb6ro4HGKPMpDl6-SRkp0EPV8ZJN2fZpv43g-bkJc-xVqPPHgx42QmDacOWeBcEb4kT5lYR6H540F_VmVUkB7ZRxNeEhX3cXysNmwRxrdbEvks3ml5S6pT1SSh2iDvYVk3xeAFhXv6GNBuy_3IOxaRwa9svXH7fR8n1YoJub8dnJM9xoGgXaxGFUoddjYMJNDjE7WYFHKePYES4ovp74OnPngJp62864kQ-8MEZmMaPPYmRX9SmSei-9VmWrdo5c9MyDBIDNgZpFF34bfA843LzSqgz1qDf26msjJX28tbP70fmNa1k5vt2OSYWVIB-G3eH280357VZbcbFmL34SqoAUOaWNjrLGPajBeVtqQO1sLW0y_662-b5ei3X4aZgDv09cfmll5IvkH1qsPYoB3ieBVkI8Fpet6T0p2-0iQjW9tClhGATlBMpEI67FIVBOFxw37YBmJSuj76XCd4MV0KVizWtLKpQZrYw64Kr9ncRMVf2fEsdUMZ6XahPBioTsC_CEkf9EgSBjKM-6l6P5C0yM51IbbUpjsjTZcfpzavuSDyOkrg2B_oSU9u_a2oX_K2NQyERxvsmJgkmV5FWol84GaNgPQZHOSekwdI52EobMAMFBapgjWVqjvhLagazWFsK9crI","description":""},{"key":"Content-Type","value":"application/json","description":""}] 

[{"key":"Accept-Encoding","value":"application/json","description":""}] 

[{"key":"Accept-Encoding","value":"application/json","description":""}] 

mes routes/api.php lit

Route::get('/user', function (Request $request) { 
    return $request->user(); 
})->middleware('auth:api'); 

mais en quelque sorte, je continue à me envoyé au formulaire de connexion Web. Toute personne qui peut m'expliquer? J'ai déjà posté un more detailed question with all sourcecode here.

+0

Comment obtenez-vous ce jeton? Et et comment vous définissez à l'en-tête. Je veux dire comment vous assurer que le jeton est valide? – C2486

Répondre

1

Utilisez ces en-têtes lors d'une requête via AJAX, jQuery le gère automatiquement pour vous mais pour les autres frameworks, il doit être fait manuellement.

X-Requested-With: XMLHttpRequest 
+0

C'est ça. Après avoir ajouté cet en-tête je ne suis plus jeté au formulaire de connexion, mais je reçois un 401 non authentifié maintenant. – FlyingWalrus

+0

Essayez de vous connecter à nouveau et d'utiliser les nouveaux jetons et assurez-vous que le middleware est correctement assigné, par défaut, il devrait être juste auth: api. – Sidharth

0

Laravel vérifie si vous avez envoyé une requête ajax ou non. Vous pouvez envoyer ces informations d'en-tête à votre api pour obtenir une réponse JSON et pas redirect:

Accept : application/json

Une autre façon est d'écrire un middleware, où vous définissez l'en-tête avant d'être transmis aux routes:

public function handle(Request $request, Closure $next) 
{ 
    $request->server->set('HTTP_ACCEPT', 'application/json'); 
    $request->headers = new HeaderBag($request->server->getHeaders()); 
    return $next($request); 
} 
+0

Bien sûr, je voulais dire l'en-tête "Accept: application/json" au lieu de mettre deux fois l'en-tête "Accept-Encoding: application/json" comme je l'ai fait dans ma question. Été juste une erreur de copier/coller. – FlyingWalrus