【问题标题】:base64 not working in Middleware of Laravel 5.4base64 在 Laravel 5.4 的中间件中不起作用
【发布时间】: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


【解决方案1】:

我不知道你想回复什么状态码,但是试试:

    $encoded = base64_encode(response()->json([
        'error' => true,
        'message' => $error_msg,
        'code' => 0
    ]));

    return response($encoded, ?response status code?)
               ->header('Content-Type', 'text/plain');

【讨论】:

  • 感谢您的回复@Kurt Friars。您给出的解决方案对我有用。谢谢你。
猜你喜欢
  • 1970-01-01
  • 2018-01-27
  • 1970-01-01
  • 2017-11-09
  • 2018-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-07
相关资源
最近更新 更多