Файл ответов с заголовком канала - PullRequest
0 голосов
/ 05 июля 2019

Как поместить носитель авторизации в качестве заголовков в файл ответов?

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 в группу, где пользователь вошел в систему.

Ответы [ 2 ]

1 голос
/ 08 июля 2019

Похоже, проблема в том, что одностраничное приложение использует защищенный API oAuth2 и вы хотите позволить пользователю загрузить файл, однако это не удается, поскольку вы не можете установить заголовок Authorization в запросе.

Лучший способ решить эту проблему - использовать функцию со знаком Laravel. Верните из своего 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 не зашифрованы и будут отображаться, например, в журналах доступа. Поэтому, пожалуйста, не делайте этого:)

1 голос
/ 05 июля 2019

Попробуйте это.

public function downloadExcel($pathToFile)
{
    $headers =[
        'Authorization' => 'Bearer XXXXXX',
        'Content-Type' => 'application/pdf',
    ];

    return response()->file($pathToFile, $headers);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...