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
Auteur
Réponse acceptée

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 ;)

AlexJM
Auteur

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

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 ?

Salut,

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