Je construis un utilisateur-microservice REST utilisant Laravel 5.5 + Passport. J'utilise le standard Passport :: routes(), mais j'ai dû modifier les routes Auth :: pour les faire retourner des réponses JSON et les faire fonctionner avec Passport.Laravel API REST - boucle infinie
J'ai ajouté les lignes suivantes à mes itinéraires/fichier web.php:
Route::group(['middleware' => 'auth:api'], function() {
$this->post('logout', 'Auth\[email protected]')->name('logout');
});
Cela me permet de POST https://myapi/logout
- Si je fais l'appel avec l'en-tête « Autorisation => Au porteur TOKEN ", j'obtiens une réponse de déconnexion réussie.
- Si je fournis sans en-tête du tout, je reçois un message « non authentifié » (ce qui est bon)
- Cependant, si je fournis l'en-tête avec un jeton révoqué, je reçois un deadloop récursif de la fonction:
Illuminate\Auth\RequestGuard->user()
(il continue d'appeler lui-même jusqu'à ce que la pile récursive-débordement)
Cela se fait dans le middleware auth:api
, mon code n'est pas atteint fermeture de session, mais mon constructeur LoginController est appelé. Code constructeur:
public function __construct(Application $app)
{
$this->apiConsumer = $app->make('apiconsumer');
$this->middleware('guest')
->except('logout');
}
J'ai du mal à comprendre si c'est mon code causant ce problème, ou une combinaison de Laravel + passeport + auth. Ma première pensée a été que le middleware auth: api ne parvient pas à authentifier l'utilisateur, et par conséquent redirige l'utilisateur vers/home, où pour une raison quelconque, il est à nouveau déclenché, de manière récursive. Mais si c'était le cas, pourquoi cela fonctionnerait-il correctement sans en-tête? Ma pensée actuelle est que le jeton en question existe existe dans la base de données, mais Laravel ne parvient pas à comprendre qu'il est révoqué.
Toutes les suggestions appréciées,
Avez-vous essayé de supprimer la route de déconnexion et d'enregistrer simplement les routes 'passport' comme indiqué dans les documents dans' AuthServiceProvider.php' dans la méthode 'boot()' en tapant 'Passport :: routes();'? –
Je n'ai pas, puis-je ré-implémenter manuellement la méthode auth logout? – mils