web-dev-qa-db-ja.com

Laravel 6パスポートが誤った資格情報で400 Badリクエストを返す

Laravel 6 passport grant password for my Vue backend。

正しい資格情報をoauth/tokenに送信すると機能し、トークンを返しますが、間違って(メール/パスワード)を送信すると、このメッセージで401ではなく400を返します。

    {
    "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."
}

client_idclient_secretを確認しました。

新しくインストールしたLaravel + passportを1行のコードなしでテストしたところ、Laravel 5.8は問題なく401を返しますが、Laravel 6は400の不正なリクエストを返します。

何かアイデアはありますか?

7
Mojtaba Sayari

app/Exceptions/Handler.phpで400レベルのエラーを401に変換するには、laravel 7.xで以下を使用する必要がありました。

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

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