添加auth:api中间件后Laravel路由无法调用控制器方法问题求助
问题根源排查&解决方案
1. API守卫未配置自定义用户模型
Laravel默认auth:api守卫对应的用户模型是App\Models\User,你使用自定义的Login模型作为身份验证载体,需要修改config/auth.php配置:
// 配置providers数组,新增Login模型对应的provider 'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\Models\User::class, ], 'login' => [ 'driver' => 'eloquent', 'model' => App\Models\Login::class, ], ], // 修改api守卫的provider指向 'guards' => [ 'api' => [ 'driver' => 'token', 'provider' => 'login', 'hash' => false, // 未对api_token做哈希处理时保持false即可 ], ],
2. 表单提交未携带API认证凭证
Laravel 5.8版本的API Token认证要求请求必须携带api_token参数,你当前的表单没有传递该参数,导致auth:api中间件认证失败直接拦截请求,不会进入控制器方法。
在表单中新增隐藏域传递token即可:
<form method="POST" action="{{ route('addLoan') }}"> <!-- 如果路由移到web.php需要加CSRF字段,纯API路由不需要 --> <input type="hidden" name="api_token" value="{{ 你的登录用户api_token变量 }}"> <!-- 其他表单字段 --> </form>
注意:写数据的业务逻辑不要用GET请求,建议改为POST避免数据泄露、浏览器预请求触发异常写入等问题。
3. 控制器代码逻辑错误
- 你当前
$company_id = $request->user();获取的是用户模型实例,不是主键ID,直接存入companies_id字段会报错,修改为:$company_id = $request->user()->id; - 税率查询没有调用
first()方法获取单条记录,直接取id会报错,修改为:$taxAmount = DB::table('tax_rates') ->where('minAmount', '<', $request->earnings) ->where('maxAmount', '>', $request->earnings) ->first(); // 新增异常判断,避免无匹配税率时报错 if (empty($taxAmount)) { return back()->withErrors(['earnings' => '未匹配到对应税率']); }
可选优化
如果你的表单是在Web端页面提交,建议将该路由移到web.php中,使用auth中间件(session认证)即可,不需要走API Token认证逻辑,更符合Web业务场景。
内容的提问来源于stack exchange,提问作者user11518995
相关产品推荐
相关产品推荐

