2017-04-01 4 views
0

J'ai navigué pendant un certain temps pour trouver une solution viable.Consommation API de certains points de terminaison à l'aide de Vue Components dans Laravel Application

J'ai un Laravel application où je certains points de terminaison dans API itinéraire.

Je voudrais consommer les données sans avoir besoin de se connecter à l'application elle-même. J'apprécierais qu'un corps puisse me guider dans la bonne direction. Je l'ai regardé dans Passport, mais je ne voudrais pas passer certaines informations comme client_id ou client_secret dans ajax appels car ils peuvent facilement être vu.

+0

Si vous ne souhaitez pas vous connecter à l'application pour obtenir l'accès, rendez vos terminaux publics. Sinon, vous devrez en quelque sorte obtenir des jetons d'accès si vos routes sont protégées – EddyTheDove

+0

@EddyTheDove, c'est ce que j'essaie de comprendre. Je veux que les points d'extrémité soient protégés. Cependant, en même temps, je devrais pouvoir l'appeler. Juste essayer de comprendre ce qui serait la bonne façon de faire à ce sujet – alithedeveloper

Répondre

0

Vous ne pouvez pas avoir les deux. Vous ne pouvez pas protéger un itinéraire, puis l'appeler sans vous authentifier. Ensuite, il est inutile de le protéger en premier lieu si vous pouvez accéder non authentifié. Facilitez-vous la vie, définissez deux fois le même itinéraire. Une fois dans le middleware, une fois sorti du middleware.

Route::get('link', '[email protected]'); 

Route::group(['middleware' => 'auth:api'], function(){ 
    Route::get('link', '[email protected]'); 
}); 

Maintenant, vous avez les deux voies, protégées et non protégées. Mais, comme je l'ai dit, ce n'est pas littéralement non protégé parce que n'importe qui peut y accéder sans s'authentifier.

+0

Je suis conscient de rendre le point de terminaison public et ensuite obtenir les données à partir de là. Peut-être que je n'étais pas assez clair dans ma question. Ce que je veux réaliser est une certaine manière de moi de pouvoir atteindre le point final de manière sécurisée tandis que si l'utilisateur final navigue vers ce point final, il le redirige vers la page spécifiée. Donc, serait-il possible d'appeler le point de terminaison de mon composant avec un jeton ou une information unique, où mon point final vérifie alors si cette requête est interne et crache les données requises. – alithedeveloper

+0

Je le pense. Copiez simplement votre jeton de la base de données et ajoutez-le manuellement à vos en-têtes de requête. C'est tout. – EddyTheDove

0

Voici mon approche de 2 cents du problème auquel je faisais face. pourrait aider quelqu'un dans le futur. Après un peu de recherche et de compréhension sur le fonctionnement de JWT, je dois encore un peu plus de recherches pour bien le comprendre. Cependant, pour avoir une vue d'ensemble, je ne peux pas trouver un meilleur article à expliquer avec des mots simples autres que https://scotch.io/tutorials/the-anatomy-of-a-json-web-token.

Maintenant, une fois que j'ai compris le fonctionnement de JWT, il m'a été facile d'en comprendre le déroulement. Alors voici comment je l'ai abordé. Comme je travaille sur une API interne pour mon entreprise, j'ai créé un middleware pour vérifier si une requête à certains points de terminaison provient d'une API en liste blanche que vous pouvez facilement obtenir à partir de $ request-> api().

Puis j'ai installé l'excellent paquet par tymondesigns au https://github.com/tymondesigns/jwt-auth. J'ai suivi l'installation et généré la clé secrète. Maintenant, voici la partie amusante. Je voulais que les points de terminaison soient sécurisés sans que je doive être connecté, d'où j'ai créé mon propre middleware où j'ai attrapé certains utilisateurs de ma table d'utilisateurs et créé un jeton JWT à partir de cet objet utilisateur.

$ utilisateur = App \ Utilisateur :: whereEmail ('email') -> first() $ token = JWTAuth :: fromUser ($ user); Une fois que j'ai eu le jeton, tout ce que je devais faire était d'appeler mon point de terminaison, c'est-à-dire/api/v1/users? Token = {generatedToken} et le tour est joué !!! tout bon à faire. Cependant, nous avons aussi besoin de rafraîchir le jeton après un certain temps, ce qui encore une fois le package fourni heureusement deux intergiciels

jwt.auth et jwt.refresh

jwt.auth tente de créer middleware jeton en utilisant la méthode authentifie par des informations d'identification, donc je l'ai échangé pour mon middleware où j'authentifie l'utilisateur comme ci-dessus et jwt.refreshes le jeton. Si vous lisez l'article que j'ai mentionné et que vous lisez le wiki du paquet, tout aura un sens. Cheerio !!