web-dev-qa-db-fra.com

Laravel 6 passeport renvoie 400 Mauvaise demande sur une mauvaise information d'identification

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?

7
Mojtaba Sayari

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);
}
0
Shobi

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);
        }
    }
}
0
Natan Augusto