Laravel 5.3 authentification JWT Passeport

plus tôt lorsque j'utilisais laravel 5.2, j'ai utilisé un paquet tiers https://github.com/tymondesigns/jwt-auth/ for making JWT based authentication. Où nous devions juste passer le nom d'utilisateur et le mot de passe pour obtenir un token.

maintenant dans laravel 5.3 avec l'introduction de passport je veux faire une authentification basée sur JWT mais passport exige que je spécifie le client_id et le client_secret avec le nom d'utilisateur et le mot de passe. qui n'y était pas en tymondesigns / jwt-auth.

Si je fais une demande sans le client_id puis elle lève une erreur http://pix.toile-libre.org/upload/original/1482908288.png mais quand je passe le client_id et client_secret puis il fonctionne très bien http://pix.toile-libre.org/upload/original/1482908143.png

Comment puis-je faire une demande JWT dans laravel 5.3 et passeport avec juste le nom d'utilisateur et le mot de passe et sans spécifier client_id et client_secret.

15
demandé sur Cœur 2016-12-29 12:40:27

3 réponses

donc, finalement je réponds à ma propre question. Espérons que cela aidera quelqu'un confronté au même problème.

l'authentification JWT peut être faite en utilisant Laravel 5.3 passport, il suffit de suivre les étapes suivantes:

OU procédez comme suit:

  • compositeur besoin laravel/passeport
  • ajouter Laravel\Passport\PassportServiceProvider::class, pour votre application fournisseurs d'
  • php artisan migrer
  • php artisan passeport:installer
  • Ajouter HasApiTokens trait à votre modèle d'utilisateur
  • Passeport:: routes (); in AppServiceProvider
  • Configurer le pilote de l'api de passeport

une fois fait, créez un UserController et ajoutez 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, ajouter le suivant itinéraires:

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

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

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

});

Maintenant, faites une requête POST à http://localhost:8000/auth avec l'adresse e-mail et le mot de passe comme indiqué dans la capture d'écran (http://pix.toile-libre.org/upload/original/1483094937.png) Cette, vous aurez l' accessstoken, vous pouvez utiliser ce token pour faire d'autres requêtes dans votre application avec le Authorization en-tête et Bearer XXX où xxx est le accessstoken vous avez reçu de / api / auth point de terminaison.

Maintenant, faites une requête GET à /api/userAuthorization en-tête et la valeur du token, cela retournera les détails de l'utilisateur authentifié. (par exemple: http://pix.toile-libre.org/upload/original/1483095018.png)

j'ai également posté ces étapes sur mon blog à http://chatterjee.pw/larvel-passport-jwt-authentication/

j'espère que cela aide!

33
répondu Phantom007 2017-08-17 05:54:25

si vous n'êtes pas intéressé par la chose OAuth et Client, vous voulez probablement utiliser une authentification JWT pure, si c'est le cas, vous pouvez vérifier 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 la déconnexion, la mise en cache de modèles d'utilisateurs, des filtres pour vérifier les propriétés supplémentaires des utilisateurs et ainsi sur.

0
répondu Milad 2018-05-16 12:28:41

$request->user(); ne fonctionne pas pour moi parce que le middleware est configuré pour le web, que j'ai aussi besoin de + d'api. Les documents ne précisent pas comment contrôler les deux scénarios.

j'ai pu obtenir des détails sur les utilisateurs avec le jeton get Author porteur+, et sur Laravel:

use Illuminate\Support\Facades\Auth;

Route::get('/user', function() {
   return Auth::guard('api')->user();
});
0
répondu Dazzle 2018-06-02 14:19:18