17 votes

Laravel 5.3 Passport JWT Authentication

Auparavant, lorsque j'utilisais Laravel 5.2, j'ai utilisé un paquet tiers. https://github.com/tymondesigns/jwt-auth/ pour réaliser une authentification basée sur JWT. Il suffit de transmettre le nom d'utilisateur et le mot de passe pour obtenir un jeton.

Maintenant dans laravel 5.3 avec l'introduction de passport je veux faire une authentification basée sur JWT mais passport me demande de spécifier le client_id et le client_secret avec le nom d'utilisateur et le mot de passe, ce qui n'était pas le cas dans tymondesigns/jwt-auth.

Si je fais une demande sans l'identifiant du client, il y a une erreur. http://pix.toile-libre.org/upload/original/1482908288.png Mais lorsque je passe l'identifiant du client et le secret du client, cela fonctionne correctement. http://pix.toile-libre.org/upload/original/1482908143.png

Comment faire une requête JWT dans laravel 5.3 et passport avec seulement le nom d'utilisateur et le mot de passe et sans spécifier client_id et client_secret.

37voto

Shouvik Points 114

Je réponds enfin à ma propre question. J'espère que cela aidera quelqu'un qui est confronté au même problème.

L'authentification JWT peut être réalisée avec le passeport Laravel 5.3, il suffit de suivre les étapes suivantes :

OU suivez les étapes suivantes :

  • composer require laravel/passport
  • ajouter Laravel\Passport\PassportServiceProvider::class, aux fournisseurs de votre application
  • php artisan migrate
  • php artisan passport:install
  • Ajouter HasApiTokens à votre modèle d'utilisateur
  • Passport::routes() ; dans AppServiceProvider
  • Configurer le pilote api pour le passeport

Une fois cela fait, créez un UserController et ajoutez-y les méthodes suivantes :

public function auth(Request $request)
{

  $params = $request->only('email', 'password');

  $username = $params['email'];
  $password = $params['password'];

  if(\Auth::attempt(['email' => $username, 'password' => $password])){
    return \Auth::user()->createToken('my_user', []);
  }

  return response()->json(['error' => 'Invalid username or Password']);
}

  public function index(Request $request)
  {
    return $request->user();
  }

Dans routes/api.php, ajoutez les routes suivantes :

Route::post('auth', 'UserController@auth');

Route::group(['middleware' => 'auth:api'], function(){

  Route::resource('user', 'UserController@index');

});

Faites maintenant une demande POST à http://localhost:8000/auth avec l'adresse email et le mot de passe comme indiqué dans la capture d'écran ( http://pix.toile-libre.org/upload/original/1483094937.png ) Cela vous permettra d'obtenir le accessToken vous pouvez utiliser ce jeton pour effectuer d'autres requêtes dans votre application à l'aide de l'option Authorization et Bearer XXX où xxx est le accessToken que vous avez reçu de la part de /api/auth point final.

Maintenant, faites une demande GET à /api/user avec le Authorization et la valeur du jeton, cela renverra les détails de l'utilisateur authentifié. (ex : http://pix.toile-libre.org/upload/original/1483095018.png )

J'ai également publié ces étapes sur mon blog à l'adresse suivante http://chatterjee.pw/larvel-passport-jwt-authentication/

J'espère que cela vous aidera !

0voto

Milad Points 991

Si vous n'êtes pas intéressé par OAuth et le client, vous voulez probablement utiliser l'authentification JWT pure, si c'est le cas, vous pouvez consulter ce paquet :

https://github.com/miladrahimi/larajwt

Il déclare un nouveau pilote d'authentification nommé "jwt" pour protéger vos routes authentifiées, il fournit un service pour générer jwt à partir de vos utilisateurs, et quelques autres outils comme le logout, la mise en cache du modèle d'utilisateur, les filtres pour vérifier les propriétés supplémentaires des utilisateurs et ainsi de suite.

0voto

Dazzle Points 600

$request->user() ; ne fonctionnait pas pour moi car le middleware est configuré en web, ce dont j'ai également besoin + api. La documentation n'est pas claire sur la façon de contrôler les deux scénarios.

J'ai pu obtenir les détails des utilisateurs avec get Auth Bearer + token, et sur Laravel :

use Illuminate\Support\Facades\Auth;

Route::get('/user', function() {
   return Auth::guard('api')->user();
});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X