認証については言及していないので、ここでは問題ないと思います。その場合、ユーザーの資格情報が正しくないか見つからないことを意味するエラーAccessDeniedException
が発生するため、401 Unauthorized
は使用しません。401 Unauthorized
ステータスの定義は次のとおりです。
リクエストにはユーザー認証が必要です。応答には、要求されたリソースに適用可能なチャレンジを含む WWW-Authenticate ヘッダー フィールド (セクション 14.47) を含める必要があります。クライアントは、適切な Authorization ヘッダー フィールド (セクション 14.8) を使用してリクエストを繰り返すことができます。リクエストに承認資格情報がすでに含まれている場合、401 応答は、それらの資格情報に対する承認が拒否されたことを示します。401 応答に前の応答と同じチャレンジが含まれており、ユーザー エージェントが少なくとも 1 回認証を試みている場合、応答で指定されたエンティティをユーザーに提示する必要があります。そのエンティティには関連する診断情報が含まれている可能性があるためです。HTTP アクセス認証については、「HTTP 認証: 基本およびダイジェスト アクセス認証」[43] で説明されています。
私も一緒に行きませんBadRequestHttpException
。400
これは、サーバーが要求を理解できなかったことを意味する応答を返します。この場合、サーバーはリクエストを理解していますが、それを拒否していると思います。400
応答の完全な定義は次のとおりです。
構文が正しくないため、サーバーは要求を理解できませんでした。クライアントは、変更なしでリクエストを繰り返すべきではありません。
ここであなたのケースに最も近いHTTPステータスは次のとおりだと思います403 Forbidden
:
サーバーは要求を理解しましたが、要求を満たすことを拒否しています。承認は役に立たず、要求を繰り返すべきではありません。リクエスト メソッドが HEAD ではなく、サーバーがリクエストが実行されなかった理由を公開したい場合、拒否の理由をエンティティに記述する必要があります。サーバーがこの情報をクライアントに提供したくない場合は、代わりにステータス コード 404 (Not Found) を使用できます。
githubのSymfony によると、Symfony には 、または類似のものがあるようには見えませんForbiddenException
...これは少し奇妙だと思います (何か足りないのでしょうか?)。
その場合は、 を実装してHttpExceptionInterface
(または単に を拡張してHttpException
)、独自のものを作成できます。それ、またはその場で一般的なものを作成することができます:
throw new HttpException(403, "Forbidden");