Connexion avec passport

Par AlexJM, il y a 9 ans


Bonjour,

Je met en place ma première API via laravel et passport. J'utilise la fonctionnalité https://laravel.com/docs/5.3/passport#password-grant-tokens afin de les connecter via une appli et un front-end réalisé en js. Cependant, je n'arrive pas à trouver comment je pourrais empêcher un utilisateur de se connecter si son compte n'a pas été validé par un admin. C'est-à-dire si son rank_id vaut null. Si quelqu'un avait une idée, ça m'aiderait grandement. Laravel 5.3 et passport étant assez récents je n'ai pas réussi à trouver...

Merci d'avance :)

4 réponses

AlexJM, il y a 9 ans

Si jamais ça intéresse quelqu'un, après avoir fouillé dans le code, j'ai finalement trouvé. Donc s'il faut que je partage, je partage

Virax, il y a 9 ans

oui ça pourrait être pratique si quelqu'un rencontre le même souci et tombe sur cette page, ça lui ferait gagner du temps tu crois pas ?

betaWeb, il y a 9 ans

Salut,

Si tu as la solution je suis preneur, ça peut toujours servir :)
Merci

AlexJM, il y a 9 ans

Note : c'est bien pour le password grant

Tout se passe dans la class "Laravel\Passport\Bridge\UserRepository", "méthode getUserEntityByUserCredentials"

Il y a deux moyens de le faire :
1) dans le modèle, mettre une méthode "findForPassword" avec en premier paramètre l'username envoyé
Dans ce cas, il faut return une instance du modèle
=> c'est la méthode qu'on choisira lorsqu'il faut par exemple se connecter avec un nom d'utilisateur ou autre
Note : comportement par défaut (aka, si la méthode n'existe pas), il cherche l'User dont l'email vaut username

2) dans le modèle toujours , mettre une méthode "validateForPassportPasswordGrant" qui aura donc comme $instance l'utilisateur que la méthode 1) aura retourné et comme paramètre le mot de passe
=> c'est la méthode qu'on choisira lorsqu'il faut par exemple valider si la connexion se fait bien avec le compte trouvé (donc par exemple si l'utilisateur est bien validé)
Note : comportement par défaut (aka, si la méthode n'existe pas), il vérifie si le password correspond au mot de passe

Voilà tout, j'ai essayé d'être le plus clair possible ;)