Laravel 6.20 403| This action is unauthorized.

laravel 6.20で、バリデーションを表示する作業をしていたとき、「403| This action is unauthorized.」というエラーに遭遇したので記録します。

Laravelで、バリデーションを表示する場合、FormRequestというフォームから入力した項目を便利に取り扱うことが可能なクラスが存在します。

artisanコマンドを利用し、リクエストクラスを作成します。

最後の引数は、作成するリクエストクラスのクラス名です。

$ php artisan make:request SampleRequest

そして、rulesメソッドにルールを追加します。

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class NewsRequest 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 [
       //ルール 以下は例
            'keywords' => 'required|string|max:20',
            'count' => 'required|integer|max:20',
        ];
    }
}

SampleController.phpに以下の内容を追記します。

use App\Http\Requests\NewsRequest;

いざ実行。すると…

上記のようなエラーメッセージが表示されました。

原因

どうやら、SampleRequest.phpのauthorizeメソッドがfalseになっているのが問題でした。デフォルトでは、falseです。

以下のようにSampleRequest.phpを修正すると、うまく表示されました。

public function authorize()
    {
        return true;   //false -> true
    }

まとめ

「403| This action is unauthorized.」というエラーメッセージがでたら、まず、SampleRequest.phpのauthorizeメソッドがtrueになっているのか確認する。