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.
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:
- Installer Passeport normalement comme décrit dans ce lien https://laravel.com/docs/master/passport#installation
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/user
Authorization
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!
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.
$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();
});