Laravel提交表单出现403未授权错误,求排查方向
表单提交出现403未授权问题排查
提交表单时出现「403 THIS ACTION IS UNAUTHORIZED.」错误,未使用任何授权/认证组件,kernel.php保持Laravel默认配置,相关代码如下:
表单代码
<form action="{{ route('tambahproduk') }}" method="POST"> @csrf <div class="modal-header"> <h4 class="modal-title">Tambah produk</h4> </div> <div class="modal-body"> <div class="form-group"> <label>Nama Produk</label> <input name="nama_produk" type="text" class="form-control" required> </div> <div class="form-group"> <label>Harga</label> <input name="harga" type="number" class="form-control" required > </div> <div class="form-group"> <label>Kategori</label> <input name="kategori" type="text" class="form-control" required > </div> <div class="form-group"> <label for="cars">Status :</label> <br> <select name="status" id="cars"> <option value="Bisa dijual">Bisa dijual</option> <option value="Tidak Bisa dijual">Tidak Bisa dijual</option> </select> </div> </div> <div class="modal-footer"> <a href="/">Kembali?</a> <input type="submit" class="btn btn-success" value="Edit"> </div> </form>
路由代码
Route::post('tambahproduk' ,[ProdukController::class, 'store'])->name('tambahproduk');
ProdukController的store方法
public function store(StoreprodukRequest $request) { $request->validate([ 'nama_produk' => 'required', 'harga' => 'required|integer', 'kategori' => 'required', 'status' => 'required' ]); produk::create([ 'nama_produk' => $request->nama_produk, 'harga' => $request->harga, 'kategori' => $request->kategori, 'status' => $request->status, ]); $produks = produk::all(); return view('daftarproduk', compact('produks')); }
问题原因
你使用的StoreprodukRequest是Laravel的表单请求验证类,该类默认包含authorize()方法,且默认返回false。即使没有手动配置授权/认证组件,这个方法的返回值会直接触发403未授权错误。
解决方案
有两种处理方式:
方式一:修改表单请求类的授权逻辑
找到app/Http/Requests/StoreprodukRequest.php文件,修改authorize()方法,让它返回true:
public function authorize() { return true; // 允许所有请求通过授权验证 }
方式二:改用基础请求类
如果不需要表单请求类的额外功能,直接将控制器方法的参数替换为Illuminate\Http\Request:
use Illuminate\Http\Request; public function store(Request $request) { // 原验证和逻辑代码保持不变 $request->validate([ 'nama_produk' => 'required', 'harga' => 'required|integer', 'kategori' => 'required', 'status' => 'required' ]); produk::create([ 'nama_produk' => $request->nama_produk, 'harga' => $request->harga, 'kategori' => $request->kategori, 'status' => $request->status, ]); $produks = produk::all(); return view('daftarproduk', compact('produks')); }
内容的提问来源于stack exchange,提问作者Tsabit
相关产品推荐
相关产品推荐

