Laravel手动安装Fortify后authenticateUsing回调无法触发是什么原因?
问题排查结论与解决方案
1. 你的路由配置是正确的
从php artisan route:list输出可以确认,登录的GET/POST路由均由Fortify官方控制器正常注册,无需手动在web.php新增登录路由。
2. 无需修改app/Http/Kernel.php
默认的web中间件组已经满足Fortify的运行要求,除非你之前手动修改过中间件配置,否则不需要调整Kernel文件。
3. 优先排查方向
- 首先修复表单字段名不匹配问题
这是最可能导致回调不触发的原因:Fortify默认要求登录提交的字段名为email(用户名)和password(密码),你当前表单中的两个输入框name属性为example-email-input、example-password-input,完全不符合要求。
Fortify的登录逻辑在执行authenticateUsing回调前会先做字段必填验证,缺少必填字段会直接抛出验证错误,不会走到回调环节。
直接修改两个输入框的name属性即可:<!-- 邮箱输入框 --> <input type="email" class="form-control" id="example-email-input" name="email" placeholder=""> <!-- 密码输入框 --> <input type="password" class="form-control" id="example-password-input" name="password" placeholder=""> - 检查
config/fortify.php中的username配置项,如果你的登录字段不是默认的email,请同步修改表单对应字段的name属性。 - 清理配置缓存:执行
php artisan config:clear、php artisan route:clear,避免旧缓存导致服务提供者配置不生效。 - 提交登录后查看响应返回的错误信息,如果存在
email字段必填、password字段必填的提示,即可确认是字段名问题。 - 如果以上操作都无效,再排查原有Starter Kit的冲突:检查是否有自定义的登录路由覆盖了Fortify的路由,是否有其他服务提供者重写了Fortify的认证逻辑,是否存在自定义中间件拦截了登录请求。
额外优化建议
你当前authenticateUsing回调中冗余写了$request = request();,入参已经拿到了请求实例,这行可以直接删掉,不影响功能但属于无效代码。
内容的提问来源于stack exchange,提问作者mstdmstd
相关产品推荐
相关产品推荐

