Laravel Sanctum报错:Call to a member function createToken() on null
解决Laravel Sanctum生成Token时"Call to a member function createToken() on null"错误
出现这个错误的核心原因是$request->user()返回了null,说明当前请求没有通过身份验证,无法获取到用户实例。以下是具体解决步骤:
给路由添加身份验证中间件
创建API令牌的前提是用户已经登录,必须给该路由加上auth:sanctum中间件,确保只有已认证的用户才能访问:use Illuminate\Http\Request; Route::post('/tokens/create', function (Request $request) { $token = $request->user()->createToken($request->token_name); return ['token' => $token->plainTextToken]; })->middleware('auth:sanctum');检查User模型是否引入HasApiTokens trait
打开你的User模型文件,确认已经正确引入并使用Sanctum的HasApiTokenstrait,这是用户模型能调用createToken()方法的必要条件:use Laravel\Sanctum\HasApiTokens; use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable { use HasApiTokens, HasFactory, Notifiable; // 其他模型代码... }确认Sanctum的安装和迁移完成
确保你已经执行过以下命令:- 运行
php artisan sanctum:install生成配置文件和迁移文件 - 运行
php artisan migrate创建personal_access_tokens数据表
- 运行
调整测试流程
用Thunder Client测试时,需要先完成用户登录:- 调用你的登录接口(比如
/api/login),获取登录返回的认证令牌 - 请求
/api/tokens/create时,在请求头中添加Authorization: Bearer [登录得到的令牌],同时携带token_name表单参数
- 调用你的登录接口(比如
内容的提问来源于stack exchange,提问作者Farukh Aleem
相关产品推荐
相关产品推荐

