J'utilise le mot de passe de concession de passeport Laravel 6 pour mon backend Vue.
Lorsque j'envoie les bonnes informations d'identification à oauth / token, cela fonctionne et renvoie le token, mais lorsque j'envoie un message erroné (email / mot de passe), il renvoie 400 au lieu de 401 avec ce message.
{ "error": "invalid_grant", "error_description": "The provided authorization grant (e.g., authorization code, resource owner credentials) or refresh token is invalid, expired, revoked, does not match the redirection URI used in the authorization request, or was issued to another client.", "hint": "", "message": "The provided authorization grant (e.g., authorization code, resource owner credentials) or refresh token is invalid, expired, revoked, does not match the redirection URI used in the authorization request, or was issued to another client." }
J'ai vérifié client_id et client_secret .
J'ai testé avec le nouveau passeport Laravel + installé sans une seule ligne de code, Laravel 5.8 renvoie 401 sans aucun problème mais Laravel 6 renvoie 400 mauvaises requêtes.
Avez-vous une idée?
4 Réponses :
Enfin j'ai trouvé le problème, le problème est de retour à league / oauth2-server que celui utilisé par le passeport Laravel.
Ils ont changé la réponse de 401 à 400 dans la version 8.
J'ai changé mon code dans la section de connexion pour cela.
switch ($e->getCode()) { case 400: case 401: return response()->json('Your credentials are incorrect. Please try again', $e->getCode()); break; default: return response()->json('Something went wrong on the server', $e->getCode());
}
J'ai changé mes propres codes, "nous ne changeons généralement pas les fichiers du fournisseur ...", mais si vous voulez savoir où était le changement de fournisseur / league / oauth2-server / src / Grant / PasswordGrant.php ligne 107 throw OAuthServerException::invalidGrant();
changement pour throw OAuthServerException::invalidCredentials();
@azurecorn
Je suis confronté au même problème. Savez-vous s'il s'agit d'un problème connu ou d'une nouvelle façon de lever des exceptions? Votre solution ne représente en fait pas la vraie réponse puisque vous ne pourrez pas afficher "Hé! Données de connexion complètes!" ou "Hé! Vos données sont fausses!"
semble que c'est une nouvelle façon, et il devrait être 400 concernant ce document https://tools.ietf.org/html/rfc6749#section-5.2
. Si vous voulez séparer les informations d'identification erronées avec une erreur, vous pouvez créer un jeton manuellement en validant le nom d'utilisateur et le mot de passe, puis $user->createToken('tokenName')->accessToken
accessToken @Luciano
C'est correct @Mojtaba Sayari, confirmé par les créateurs sur github.com/thephpleague/oauth2-server/issues/1093 Merci pour votre solution possible BTW
Je vous suggère d'utiliser abort au lieu de response: abort($response->status(), 'Your credentials are incorrect. Please try again')
Vous pouvez ajouter le gestionnaire d'erreurs sur App \ Exceptions \ Handler
use League\OAuth2\Server\Exception\OAuthServerException; class Handler extends ExceptionHandler { public function render($request, Exception $exception) { if (get_class($exception) === OAuthServerException::class) { response()->json(['message' => $exception->getMessage()], 401); } } }
Rectifier use Laravel\Passport\Exceptions\OAuthServerException
J'ai dû utiliser ce qui suit dans laravel 7.x pour convertir l'erreur de niveau 400 en 401 dans app/Exceptions/Handler.php
NB: vérifiez le type de OAuthServerException::class
/** * Render an exception into an HTTP response. * * @param \Illuminate\Http\Request $request * @param \Exception $exception * @return \Illuminate\Http\Response */ public function render($request, Throwable $exception) { if (get_class($exception) === \Laravel\Passport\Exceptions\OAuthServerException::class) { return response(['message' => $exception->getMessage()], 401); } return parent::render($request, $exception); }
Mettre à jour le mot de passe UserFactory (utilisez Hash :: make () pas bcrypt)
401 n'est pas autorisé, ce n'est pas une `` mauvaise information d'identification ''
Je sais, mais dans Laravel 5.8 lorsque je fournis un nom d'utilisateur / mot de passe incorrect, il renvoie 401 avec ce message: invalid_credentials (les informations d'identification de l'utilisateur étaient incorrectes) mais dans Laravel 6, il renvoie 400 avec le message invalid_grant @AlbertoSinigaglia
Avez-vous créé votre paire de clients avec l'indicateur
--password
dans artisan?Selon le site Web de Laravel "Si vous avez déjà exécuté la commande passeport: install, vous n'avez pas besoin d'exécuter cette commande", mais oui, je les ai supprimés et j'ai créé un nouveau client avec le drapeau --password. @mdexp
Je rencontre le même problème, avez-vous trouvé une solution à cela?
@NinetyHH J'ai répondu à ce que j'ai trouvé.