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_idとclient_secretを確認しました。
新しくインストールしたLaravel + passportを1行のコードなしでテストしたところ、Laravel 5.8は問題なく401を返しますが、Laravel 6は400の不正なリクエストを返します。
何かアイデアはありますか?
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);
}
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);
}
}
}