Laravel Sanctum中间件返回字符串触发ThrottleRequests类型错误
Laravel Sanctum中间件返回提示信息报错解决方法
错误原因
你触发的错误提示意思是:节流中间件ThrottleRequests的addHeaders方法要求第一个参数必须是Symfony\Component\HttpFoundation\Response类型,但你返回的是字符串,类型不匹配导致报错。这是因为Laravel中间件的handle方法必须返回Response实例,不能直接返回字符串或数组。
修复方案
方案1:使用response()助手函数返回JSON响应
直接用Laravel自带的response()->json()生成标准的Response实例,适配API场景:
public function handle(Request $request, Closure $next) { $user = auth()->user(); if ($user->mobile_verified != 1) { return response()->json([ 'success' => false, 'code' => 400, 'message' => '请验证您的手机号', 'data' => null ], 400); } return $next($request); }
方案2:修复自定义APIHelper的响应方法
如果要使用你注释掉的APIHelper::ApiResponse,需要确保这个方法返回的是Response实例,而不是原始数组或字符串。修改APIHelper类的方法:
class APIHelper { public static function ApiResponse($success, $code, $message, $data) { // 封装成Response实例返回 return response()->json([ 'success' => $success, 'code' => $code, 'message' => $message, 'data' => $data ], $code); } }
之后在中间件中正常调用即可:
public function handle(Request $request, Closure $next) { $user = auth()->user(); if ($user->mobile_verified != 1) { return APIHelper::ApiResponse(false, 400, '请验证您的手机号', null); } return $next($request); }
内容的提问来源于stack exchange,提问作者TechRian
相关产品推荐
相关产品推荐

