[Laravel] artisan make:requestでFormRequest使用時にThis action is unauthorized.エラーが出る時

カテゴリ: Laravel, PHP

Laravelは、artisan make:requestコマンドで入力パラメータをvalidtionできるFormRequestクラスを作成できます。

artisanコマンドで作成したFormRequestを編集せずに使用するとThis action is unauthorized.が出るので注意が必要です。

エラーの原因

エラーが発生する理由ですが、artisanコマンドで作成したFormRequestクラスは自動でauthorize()メソッドを用意しており、falseを無条件で返しているためです。

use Illuminate\Foundation\Http\FormRequest;

class PostRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return false;
    }
...

対処方法

暫定で認証OKにする場合

認証処理をあとで差し変える予定でいったん認証OKにしたい場合は、戻り値をtrueに書き換えれば、無条件に認証OKの扱いにすることができます。

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

Authパッケージ認証する場合

Authパッケージを使っている場合は、Auth::check();をコールすれば良いでしょう。

use Illuminate\Support\Facades\Auth;

...
    public function authorize()
    {
        // return false;
        Auth::check();
    }

認証しない/FormRequest以外で認証する場合

認証を行わない予定や、Middlewareなどの別の仕組みで認証を行う場合は、authorize()メソッド自体を削除して仕舞えば良いです。
継承元であるIlluminate\Foundation\Http\FormRequestは以下のようなコードになっており、authorize()メソッドがある時のみこのメソッドをコールする仕組みになっているためです。

namespace Illuminate\Foundation\Http;

class FormRequest extends Request implements ValidatesWhenResolved
{
   ...

   /**
     * Determine if the request passes the authorization check.
     *
     * @return bool
     */
    protected function passesAuthorization()
    {
        if (method_exists($this, 'authorize')) {
            return $this->container->call([$this, 'authorize']);
        }

        return true;
    }
こちらもおススメ

コメントを残す

メールアドレスが公開されることはありません。