【发布时间】:2021-07-26 19:11:34
【问题描述】:
我想在我使用 nuxt auth 模块的 nuxt 项目中使用 axios 向外部 API 发送 POST 请求。
当用户通过身份验证时,axios 似乎会自动添加一个授权标头(这很好,并且通常在调用我的后端 API 时需要)。但是,在调用外部 API 时,可能不接受标头并导致调用失败。
有没有办法指定应该为哪些 URL 添加或排除 auth 标头?
这里是我nuxt.config中auth和axios模块的配置
// Axios module configuration
axios: {
baseURL: '//localhost:5000',
},
// Auth module configuration
auth: {
strategies: {
local: {
endpoints: {
login: { url: '/auth/login', method: 'post', propertyName: 'token' },
logout: { url: '/auth/logout', method: 'delete' },
user: { url: '/auth/user', method: 'get', propertyName: 'user' },
},
},
},
}
更多背景: 在我的特定用例中,我想将文件上传到 Amazon S3 存储桶,因此我创建了一个预签名的上传请求,然后想将文件直接上传到存储桶中。只要用户未经过身份验证,这一切都可以正常工作。
const { data } = await this.$axios.get('/store/upload-request', {
params: { type: imageFile.type },
})
const { url, fields } = data
const formData = new FormData()
for (const [field, value] of Object.entries(fields)) {
formData.append(field, value)
}
formData.append('file', imageFile)
await this.$axios.post(url, formData)
我尝试通过请求配置取消设置 Auth 标头:
const config = {
transformRequest: (data, headers) => {
delete headers.common.Authorization
}
}
await this.$axios.post(url, formData, config)
这似乎阻止了添加所有与 formData 相关的标题。通过headers 属性或transformRequest 函数在配置中设置任何标头也不起作用,这再次导致对外部API 的调用明显失败(将在没有任何这些特定标头的情况下发送请求)。
当我正在使用 nuxt axios 模块时,我不确定如何按照 here 或 here 的描述向 axios 实例添加拦截器。
非常感谢任何有关在哪里可以找到帮助的帮助或提示:)
【问题讨论】:
标签: vue.js authentication amazon-s3 axios nuxt.js