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
相关产品推荐
相关产品推荐

