javascript - 在 Vuejs 中使用带有 Axios 的 HTTP 基本身份验证时出现 401 错误
问题描述
我正在开发一个 Vuejs 应用程序,该应用程序从 Apache Solr 索引获取数据,并且我的应用程序使用Axios与索引一起工作以建立连接。但是,添加了 HTTP 基本身份验证,我无法使身份验证正常工作。标Access-Control-Allow-Origin
头是在服务器上设置的(它在将身份验证添加到索引之前工作),所以这不是问题。我正在尝试像这样使用auth
配置对象中的对象axios.get()
:
const params = new URLSearchParams()
params.append('fl', 'label,bundle,entity_id,ss_language,url,is_product_slideshow')
if (this.nodeType) {
params.append('fq', 'bundle:' + this.nodeType)
} else {
params.append('fq', 'bundle:' + '(article OR document OR video OR product_display)')
}
params.append('fq', 'ss_language:' + this.language)
params.append('fq', 'bs_status:' + 1)
params.append('fq', '-is_field_restricted_to_internal_use:1')
params.append('fq', '-is_field_restricted_to_author_of_as:1')
params.append('fq', '-is_field_pp_confidential:1')
params.append('fq', '-is_field_pp_do_not_show_item_on_t:1')
params.append('q', qs)
params.append('sort', 'is_sort asc')
params.append('wt', 'json')
params.append('rows', 10)
params.append('start', queryStartRows)
axios.get('https://my-solr-url.com/solr/my-solr-index/select', {
params: params,
withCredentials: true,
auth: {
username: 'myusername',
password: 'mypassword'
}
})
.then(response => {
this.results = response.data.response.docs
var numFound = this.numFound = response.data.response.numFound
// Calculate last page.
var numFoundRounded = Math.floor(numFound / 10) * 10
var numPages = numFoundRounded / 10
this.lastPage = numPages
})
我可以从邮递员那里得到正常运行的查询,所以我知道我有正确的凭据。
从我从文档和其他示例中可以看出,我做得对,但我仍然收到 401 错误。
我还使用 Drupal 站点中的这个索引,在那里,用户 ID 和密码作为 URL 的一部分传递:
https://myusername:mypassword@my-solr-url.com/solr/my-solr-index/select?...
但这种方法在这里也行不通。我需要做些什么不同的事情才能使身份验证正常工作?
解决方案
我遇到了与您使用 ExpressJS 应用程序描述的相同的问题;Axiosauth: {username: 'user', password: 'pass'}
在浏览器中被 Axios 客户端的 401 拒绝,但来自 Postman 的 200 OK。你提到你正在设置Access-Control-Allow-Origin
,我能够通过确保中间件在CORS
中间件之前执行来解决这个问题auth
。我注意到我的 Axios 客户端在导致浏览器基于 CORS 策略阻塞的 OPTIONS
请求之前发送了一个 HTTP 请求。GET
对于那些想知道如何根据@Inus 的建议手动计算 base64 编码字符串的人,btoa()
可以使用 JS 方法,但是在浏览器中这仍然给了我一个 401(如预期的那样),因为这相当于 Axios 在使用时计算的授权标头财产auth
。
推荐阅读
- scorm - 您可以通过 SCORM 课程调用外部 api
- c++ - QDockWidget 中的 QToolBox 折叠到最小尺寸
- sapui5 - 输入辅助不显示所有建议
- node.js - 如何将旧代码库中的“bcrypt-as-promised”安装到我的 ubuntu 机器上?
- php - 当数据字符串中有空格或 <> 时,fwrite 不写入文件
- html - 滚动条及其内容隐藏在 div 之外
- node.js -
角度 5 中的功能 - python - 列出理解以创建成对的差异
- node.js - 无法写入 TTD 跟踪 - 同步模块加载完成了吗?nodejs调试节点chakkara
- php - Laravel - 在循环中获取关系 - 最佳实践