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

Laravel Lumen Passport登录报错:Auth driver [api] for guard [api]未定义

Laravel Lumen Passport登录报错:Auth driver [api] for guard [api] is not defined 解决办法

报错信息

Auth driver [api] for guard [api] is not defined

你提供的代码片段

登录函数代码

public function login(Request $request)
{
    
    $login_credentials=[
        'email'=>>$request->email,
        'password'=>>$request->password,
    ];
    if(auth()->attempt($login_credentials)){
    
        $user= auth()->user();
     
        return response()->json(['user' => $user], 200);
    }
    else{
        //wrong login credentials, return, user not authorised to our system, return error code 401
        return response()->json(['error' => 'UnAuthorised Access'], 401);
    }
}

路由配置

$router->group(
    ['prefix' => 'v1/api',
    'middleware' => 'client'],
    function () use ($router) {
        $router->post('/register','UserController@register');
        $router->post('/login','UserController@login');
});

bootstrap/config/auth.php 配置

return [
    'defaults' => [
        'guard' => 'api',
        'passwords' => 'users',
    ],
'guards' => [
        'api' => [
            'driver' => 'passport',
            'provider' => 'users',
            'hash' => true,
        ],
    ],
'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => \App\Models\User::class
        ]
    ]
];

问题原因及解决步骤

1. 修复语法错误

登录函数里的=>>是无效语法,会导致代码执行异常,必须修正为标准的=>:

$login_credentials=[
    'email' => $request->email,
    'password' => $request->password,
];

2. 适配Lumen Passport的登录逻辑

Lumen Passport不支持auth()->attempt()方法(该方法对应session驱动),需改用Passport官方推荐的密码授权模式实现登录:

public function login(Request $request)
{
    // 先验证请求参数
    $request->validate([
        'email' => 'required|email',
        'password' => 'required',
    ]);

    $http = new \GuzzleHttp\Client;

    try {
        // 调用Passport的oauth/token接口获取令牌
        $response = $http->post(config('app.url').'/oauth/token', [
            'form_params' => [
                'grant_type' => 'password',
                'client_id' => config('passport.password_client.id'),
                'client_secret' => config('passport.password_client.secret'),
                'username' => $request->email,
                'password' => $request->password,
                'scope' => '',
            ],
        ]);

        return response()->json(json_decode((string) $response->getBody(), true), 200);
    } catch (\GuzzleHttp\Exception\BadResponseException $e) {
        if ($e->getCode() === 400) {
            return response()->json(['error' => 'Invalid credentials'], 400);
        } elseif ($e->getCode() === 401) {
            return response()->json(['error' => 'Unauthorized'], 401);
        }

        return response()->json(['error' => 'Server error'], $e->getCode());
    }
}

3. 修正路由中间件配置

登录接口不需要client中间件(该中间件需要已存在的有效令牌),应单独剥离:

// 公开路由:注册、登录无需验证
$router->group(['prefix' => 'v1/api'], function () use ($router) {
    $router->post('/register','UserController@register');
    $router->post('/login','UserController@login');
});

// 需令牌验证的接口
$router->group(['prefix' => 'v1/api', 'middleware' => 'client'], function () use ($router) {
    $router->get('/user','UserController@getUserInfo');
});

4. 确保Passport在Lumen中正确初始化

在bootstrap/app.php中完成以下配置:

// 启用Facades(Passport依赖)
$app->withFacades();

// 注册Passport服务提供者
$app->register(Laravel\Passport\PassportServiceProvider::class);

// 加载auth配置文件
$app->configure('auth');

5. 验证User模型配置

确保你的User模型使用了Passport的HasApiTokens trait:

namespace App\Models;

use Illuminate\Foundation\Auth\User as Authenticatable;
use Laravel\Passport\HasApiTokens;

class User extends Authenticatable
{
    use HasApiTokens;

    // 模型其他代码...
}

6. 生成Passport密码客户端

确保已运行以下命令生成密码授权所需的客户端ID和密钥:

php artisan passport:install

内容的提问来源于stack exchange,提问作者Maryam Aftab

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 20:42:02