J'utilise Laravel 6 passeport mot de passe pour mon Vue backend.
Quand j'envoie les bonnes informations d'identification à oauth/token cela fonctionne et renvoie le jeton, mais quand j'envoie un mauvais (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 une nouvelle installation Laravel + passeport 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?
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érifier le OAuthServerException::class
type
/**
* 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);
}
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);
}
}
}