0

使用 Tymon jwt 令牌进行身份验证。Laravel 工作正常。

当使用 Laravel vapor 的上传到 S3 代码时,我无法获取签名存储 URL 来使用我的 axios 默认值:

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

存储方法如文档中所示:

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

它在 npm 包的 index.js 中调用它:

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 模块不在正确范围内有关。

我已经覆盖了 vapor-core signed-storage-url 控制器来使用令牌,并且可以让它与 Postman 一起工作。它正在调用 Vapor.store ,它不会将令牌添加到 axios 调用中,而且我看不到传递标头的方法。

编辑:您无需注册 Vapor 即可使用这些软件包。

composer require laravel/vapor-core

npm install --save-dev laravel-vapor
4

1 回答 1

3

已解决 所以为了完成这项工作,我将异步存储方法复制到我的 vue 组件方法并从那里调用它。获取默认标题,但...

这在 S3 中创建了一个 axios 标头问题,可以通过以下方式解决:

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

于 2019-10-25T05:58:43.850 回答