You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

添加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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 17:30:02