Laravel 5.6报错:Illuminate\Auth\GenericUser::withAccessToken()未定义
问题根源与解决方案
嘿,这个错误我之前调试Passport的时候也碰到过!核心问题很明确:你当前认证返回的用户实例是Illuminate\Auth\GenericUser,而这个类压根没有withAccessToken()方法——这个方法是Laravel Passport专门提供的,只有让你的User模型正确集成Passport的特性才能用。
具体修复步骤:
给User模型加上Passport的Trait
打开你的App\User(或者项目中对应的用户模型文件),确保引入并使用HasApiTokenstrait:namespace App; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Laravel\Passport\HasApiTokens; // 引入Passport的Trait class User extends Authenticatable { // 把HasApiTokens加到use列表里 use HasApiTokens, Notifiable; // ... 模型里的其他代码(比如填充字段、关联关系等) }确认API Guard的驱动配置
去config/auth.php文件里,检查guards下的api配置,驱动必须设为passport,而不是默认的session或者其他:'guards' => [ // ... 其他Guard配置(比如web) 'api' => [ 'driver' => 'passport', // 这里一定要是passport! 'provider' => 'users', ], ],清除配置缓存(可选但建议做)
有时候配置改了之后Laravel还读的是缓存,跑一下这俩命令清缓存:php artisan config:clear php artisan cache:clear重新生成访问令牌
之前生成的令牌可能是基于旧的用户模型生成的,建议重新生成一次再测试接口:$token = $user->createToken('MyApp')->accessToken;
为啥会出现这个错误?
当你用auth:api中间件时,Laravel会根据api Guard的配置拉取用户实例。如果你的User模型没加HasApiTokens,或者Guard驱动不是passport,系统就会返回一个基础的GenericUser实例,这个实例完全不支持Passport的令牌操作,自然就会报“找不到withAccessToken方法”的错误了。
内容的提问来源于stack exchange,提问作者astrakid932
相关产品推荐
相关产品推荐

