Laravel调用createToken无法获取accessToken加密字符串怎么办
Laravel接口认证无法正确返回Token字符串排查方案
问题核心原因:接口返回的是createToken()方法返回的令牌实例对象,而非实例下挂载的明文字符串令牌,可按以下步骤逐一排查:
- 校验接口返回的赋值逻辑
确认给响应token字段赋值时,确实读取了accessToken属性,不要直接返回createToken()的调用结果。
错误写法示例:
正确写法示例:// 直接返回实例会输出结构化对象,不符合预期 $tokenResult = $user->createToken('app'); return ['token' => $tokenResult];// 读取accessToken属性才会返回预期的加密字符串 $plainTextToken = $user->createToken('app')->accessToken; return ['token' => $plainTextToken]; - 校验User模型的Token配置
如果你用Sanctum做接口认证,确认User模型正确引入Laravel\Sanctum\HasApiTokens特征;如果用Passport,确认引入的是Laravel\Passport\HasApiTokens特征,特征引入错误、命名空间写错都会导致属性读取异常。 - 校验API资源层的字段配置
如果你使用Eloquent API Resource做响应格式化,不要把token字段放到关联加载逻辑(比如$this->whenLoaded())中——accessToken是动态返回的明文字段,不是模型关联关系,放到关联加载逻辑中会读取失败,最终返回结构化的Token模型数据。 - 校验全局响应处理逻辑
检查项目中是否配置了全局Response宏、响应中间件,对返回内容做了自动对象递归转数组处理,导致原本赋值的字符串Token被替换为Token实例的结构化内容。
预期正确返回效果参考:
内容的提问来源于stack exchange,提问作者toshi
相关产品推荐
相关产品推荐

