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;
}
こちらもおススメ