【发布时间】:2020-10-22 23:52:03
【问题描述】:
我的中间件代码:
public function handle($request, Closure $next) {
$api_headers = getallheaders();
$error_msg = '';
$error = 0;
if (isset($api_headers) && !empty($api_headers)) {
if (isset($api_headers ['device_id']) && !empty($api_headers['device_id'])) {
} else {
$error_msg = 'Please send device ID header.';
$error = 1;
}
if (isset($api_headers['device_type']) && !empty($api_headers['device_type'])) {
} else {
$error_msg = 'Please send device type header.';
$error = 1;
}
} else {
$error_msg = 'Please send headers.';
$error = 1;
}
if ($error == 1) {
return base64_encode(response()->json(['error' => true, 'message' => $error_msg, 'code' => 0]));
} else {
return $next($request);
}
}
我想将 JSON 转换为编码字符串并将其作为响应发送。所以我使用 base64_encode 将其转换为字符串。但它不适用于中间件。我不知道它的原因我做了很多努力但不知道该怎么做。我还附上了错误的屏幕截图。如果可能,请提供帮助。
【问题讨论】:
-
您必须从中间件返回某种
Response...在此中间件之前的中间件期望通过堆栈传回响应...您不能只返回一个字符串(请求进来,响应出去) -
@lagbox 感谢您的回复。如果我想要一个字符串作为来自中间件的响应,该怎么办。因为整个 API 控制器中只有单个字符串作为响应返回。此错误仅发生在此中间件中。
-
JSON 已经是一个字符串了......不知道问题出在哪里,为什么你不能只返回你创建的没有 base64 编码的 json 响应?
-
@lagbox 由于某些安全性,它必须以加密形式发送。这就是对 JSON 使用 base64 的原因
-
base64 不加密............
标签: json laravel api base64 middleware