Laravel フォームリクエストを使用してバリデーションを指定したら403エラーが出た


目的

  • フォームリクエスト(FormRequest)を使用してバリデーションを実装してブラウザから動作を確認したところルールにクリアしていても403エラーがでてしまい、当事象を解決した話をまとめる。

実施環境

  • ハードウェア環境
項目 情報
OS macOS Catalina(10.15.3)
ハードウェア MacBook Pro (16-inch ,2019)
プロセッサ 2.6 GHz 6コアIntel Core i7
メモリ 16 GB 2667 MHz DDR4
グラフィックス AMD Radeon Pro 5300M 4 GB Intel UHD Graphics 630 1536 MB
  • ソフトウェア環境
項目 情報 備考
PHP バージョン 7.4.3 Homwbrewを用いて導入
Laravel バージョン 7.0.8 commposerを用いて導入
MySQLバージョン 8.0.19 for osx10.13 on x86_64 Homwbrewを用いて導入

エラー内容

  • フォームリクエストを用いてバリデーションを実装し、定義したルールに違反していない状態でも下記のエラーが発生した。

    • 「403 This action is unauthorized.」

原因

  • このフォームリクエストを送信するための認証情報が存在しないためエラーが発生していた。
  • 本エラーをとにかく解決したい場合は当該のバリデーションルールが記載されているフォームリクエストクラスファイルを開きauthorizeメソッド内を修正する。

    • エラーの発生したフォームリクエストクラスファイルを下記に記載する。

      アプリ名ディレクトリ/app/Http/Requests/StoreContentPost.php
          <?php
      
          namespace App\Http\Requests;
      
          use Illuminate\Foundation\Http\FormRequest;
      
          class StoreContentPost extends FormRequest
          {
              /**
               * Determine if the user is authorized to make this request.
               *
               * @return bool
               */
              public function authorize()
              {
                  return false;
              }
      
              /**
               * Get the validation rules that apply to the request.
               *
               * @return array
               */
              public function rules()
              {
                  return [
                      //バリデーションルールを記載する
                      //'チェックするデータ名' => 'ルール1|ルール2'の様にルールを定義する
                      'title' => 'required',
                      'detail' => 'required',
                  ];
              }
          }
      
    • エラーを解決したしたフォームリクエストクラスファイルを下記に記載する。

      アプリ名ディレクトリ/app/Http/Requests/StoreContentPost.php
          <?php
      
          namespace App\Http\Requests;
      
          use Illuminate\Foundation\Http\FormRequest;
      
          class StoreContentPost extends FormRequest
          {
              /**
               * Determine if the user is authorized to make this request.
               *
               * @return bool
               */
              public function authorize()
              {
                  return true;
              }
      
              /**
               * Get the validation rules that apply to the request.
               *
               * @return array
               */
              public function rules()
              {
                  return [
                      //バリデーションルールを記載する
                      //'チェックするデータ名' => 'ルール1|ルール2'の様にルールを定義する
                      'title' => 'required',
                      'detail' => 'required',
                  ];
              }
          }