Laravel 6.x Auth脚手架:verification.resend路由无法触发VerificationController@resend?
解决Laravel 6.x VerificationController@resend方法无法触发的问题
根据你描述的场景,我整理了几个最可能的原因和对应的解决办法,你可以逐一排查:
1. 表单缺少CSRF令牌(最常见原因)
Laravel的所有POST表单必须包含CSRF令牌,否则请求会被VerifyCsrfToken中间件直接拦截,根本无法到达控制器方法。你的表单代码里没有添加令牌,这大概率是问题所在。
修改前端表单,添加@csrf指令:
<form action="{{route('verification.resend')}}" method="post"> @csrf <button type="submit" class="btn btn-primary">@lang('resend')</button> </form>
2. 检查限流中间件是否触发
你的路由配置了throttle:6,1,意味着1分钟内最多允许6次请求。如果你短时间内多次点击按钮,可能已经触发了限流,导致请求被拦截。
- 等待1分钟后再尝试提交表单
- 或者暂时移除路由中的
throttle中间件,测试是否能触发resend方法
3. 确认VerificationController的继承与Trait使用
Laravel 6.x的VerificationController默认应该引入Illuminate\Foundation\Auth\VerifiesEmails trait,这个trait已经内置了resend方法。如果你自行添加了resend方法,需要确保:
- 控制器正确引入了该trait:
use Illuminate\Foundation\Auth\VerifiesEmails; use Illuminate\Http\Request; class VerificationController extends Controller { use VerifiesEmails; // 你的其他代码... public function resend(Request $request) { // 你的自定义逻辑 dd('触发resend方法'); } }
- 确认控制器的命名空间正确(
App\Http\Controllers\Auth\),与路由指向的完全一致
4. 清除路由缓存
如果之前执行过php artisan route:cache,修改路由或控制器后可能缓存未更新,导致请求无法正确映射到新的方法。执行以下命令清除缓存:
php artisan route:clear
5. 检查请求状态(通过浏览器开发者工具)
打开浏览器的开发者工具(F12),切换到Network标签,点击提交按钮后查看请求的状态码:
- 如果是
419 Page Expired:确认是CSRF令牌问题 - 如果是
302 Found:检查是否被auth中间件重定向(比如用户实际未登录) - 如果是
200 OK但没执行dd:检查控制器方法是否有语法错误,或者是否有其他全局中间件拦截
排查完这些点,应该就能解决resend方法不触发的问题了。
内容的提问来源于stack exchange,提问作者Stroomschok
相关产品推荐
相关产品推荐

