Использовать значения по умолчанию Axios в подписи-хранилище паров laravel - PullRequest
0 голосов
/ 21 октября 2019

Использование токенов Tymon jwt для аутентификации. Laravel работает нормально.

При использовании кода загрузки в S3 для паров Laravel я не могу получить подписанный URL-адрес хранилища для использования значений по умолчанию:

axios.defaults.headers.common["Authorization"] = 'Bearer ' + token;

Метод хранения, как показано в документации:

Vapor.store(this.$refs.file.files[0], {
    progress: progress => {
        this.uploadProgress = Math.round(progress * 100);
    }
}).then(response => {
...

Это вызывается в index.js пакета npm:

async store(file, options = null) {
        // want this to use my default header.
        const response = await axios.post('/vapor/signed-storage-url', {
            'bucket': options.bucket || '',
            'content_type': options.contentType || file.type,
            'expires': options.expires || ''
        });

Возможно, что-то связано с отсутствием модуля npm. правильная область действия.

Я переопределил контроллер подписанного хранилища URL парового ядра, чтобы использовать токен, и могу заставить его работать без проблем с Почтальоном. Он вызывает Vapor.store, который не добавляет токен к вызову axios, и я не вижу способа передать заголовки.

Редактировать : Вы можете использовать эти пакетыбез регистрации на Vapor.

composer require laravel/vapor-core

и

npm install --save-dev laravel-vapor

1 Ответ

0 голосов
/ 25 октября 2019

решено Итак, чтобы сделать эту работу, я скопировал метод асинхронного хранилища в мои методы компонента vue и вызвал его оттуда. Получает заголовки по умолчанию, но ...

Это создало проблему с заголовком axios в S3, которая решается следующим образом:

async store(file, options = null) {
            const response = await axios.post('/vapor/signed-storage-url', {
                'bucket': options.bucket || '',
                'content_type': options.contentType || file.type,
                'expires': options.expires || ''
            });

            if (typeof options.progress === 'undefined') {
                options.progress = () => {};
            }
// This is the fix for the headers. Instance just for the S3 PUT
            var instance = axios.create();
            instance.defaults.headers.common = {};
            const s3Response = await instance.put(response.data.url, file, {
                headers: response.data.headers,
                onUploadProgress: (progressEvent) => {
                    options.progress(progressEvent.loaded / progressEvent.total);
                }
            });

            response.data.extension = file.name.split('.').pop()

            return response.data;
        },

Благодаря https://github.com/axios/axios/issues/382#issuecomment-254712154

...