如何将授权载体作为标题放入响应文件中?
public function downloadExcel($fileName) {
ob_end_clean();
return response()->file(resource_path() . '/file_storage/exports/' . $fileName, ['header' => 'Authorization: Bearer ' . request()->bearerToken])->deleteFileAfterSend(true);
}
尝试下载Excel文件时,我得到了未授权。我将我的api放在一个用户登录的组中。
答案 0 :(得分:1)
尝试一下。
public function downloadExcel($pathToFile)
{
$headers =[
'Authorization' => 'Bearer XXXXXX',
'Content-Type' => 'application/pdf',
];
return response()->file($pathToFile, $headers);
}
答案 1 :(得分:1)
问题似乎出在具有使用受oAuth2保护的API的单页应用程序,并且您想让用户下载文件,但这失败了,因为您无法在请求上设置Authorization
标头
解决此问题的最佳方法是使用Laravel的signed url's功能。从您的API返回一个签名的URL(例如,仅有效1小时),并且不使用oAuth2中间件而是通过链接的单个url文档(signed
中间件)中的说明保护您的下载路径。
您的控制器动作将不仅仅是这样:
public function downloadExcel($fileName)
{
return response()->file(resource_path() . '/file_storage/exports/' . $fileName)
->deleteFileAfterSend(true);
}
请注意->deleteFileAfterSend(true)
部分,因为这将在首次下载后从磁盘上删除文件,这可能是有意的,但我还是想提一下
这是最安全的选项。还有其他一些,但是它们将要求您将访问令牌作为GET参数放入请求中,这是一个非常糟糕的主意,因为GET参数未加密,并且会显示在访问日志中。所以请不要这样做:)