Laravel根据表单参数控制账号删除函数执行问题求助
解决账号删除无法根据用户选择控制执行的问题
你的代码存在几个关键问题,导致无法根据用户的选择控制删除逻辑,下面是具体修正方案:
1. 修正HTML表单错误
当前表单的radio按钮值设置错误,且按钮类型不符合规范,同时缺少Laravel必需的CSRF令牌:
<div class="big"> <form method="POST" action="{{ route('deleteAccount') }}"> @csrf <!-- 必须添加CSRF令牌,否则表单提交会被Laravel拦截 --> <label for="yes">确认删除</label> <input id="yes" type="radio" name="confirm" value="yes" required> <label for="no">取消删除</label> <input id="no" type="radio" name="confirm" value="no" required> <button type="submit">确认</button> <!-- 按钮类型必须是submit,否则无法触发表单提交 --> </form> </div>
- 把radio的
value直接设为yes和no,old('yes')用于回显用户之前提交的旧值,这里初始值不需要 - 移除重复的
autofocus属性,两个单选框同时设置无意义 - 添加
@csrf指令,Laravel默认会拦截无CSRF令牌的POST请求
2. 修正控制器的删除逻辑
当前delete方法没有处理用户的选择,且错误使用了Events模型来查找用户,修正如下:
public function delete(Request $request) { // 验证提交的参数合法性 $request->validate([ 'confirm' => 'required|in:yes,no', ]); // 根据用户选择分支处理:仅当选择yes时执行删除 if ($request->confirm !== 'yes') { return redirect()->back()->with('message', '账号删除已取消'); } // 使用User模型查找当前登录用户(替换成你的实际User模型命名空间) $user = \App\Models\User::findOrFail(Auth::user()->id); $this->authorize('delete', $user); $user->delete(); return redirect('/login')->with('message', '账号已成功删除'); }
- 先验证
confirm参数的合法性,确保只能是yes或no - 选
no时返回上一页并提示取消,选yes才执行删除操作 - 替换
Events::find为User::findOrFail,因为你要删除的是用户账号,不是事件数据
3. 优化删除确认页的权限验证
当前deleteProfile方法的$id参数未被使用,可以优化权限验证,确保用户只能访问自己的删除页面:
public function deleteProfile($id) { if (!Auth::check() || Auth::user()->id != $id) { return redirect('/login')->with('error', '无权访问该页面'); } return view('pages.delete_account'); }
内容的提问来源于stack exchange,提问作者Guilherme Moreira
相关产品推荐
相关产品推荐

