可以使用 Postman 访问本地端点,但不能使用 Axios 访问



我正在尝试在我的Javascript React应用程序中使用Axios发出一个简单的GET请求。 这个请求在邮递员身上效果很好,但我无法让它与 Axios 一起工作。

我已经尝试了几种不同的代码变体,但没有一种有效。 这是最简单的版本:

import React, { useEffect } from 'react';
import { Auth } from 'aws-amplify';
useEffect(() => {
const fetchRoles = async () => {
var authToken;
Auth.currentSession()
.then(data => { 
authToken = data.getAccessToken().getJwtToken();
})
.catch(err => console.log(err));
var config = {
headers: { Authorization: "Bearer " + authToken}
};
var bodyParameters = {
key: "value"
};
axios.get("http://127.0.0.1:5000/accounts/roles", bodyParameters, config)
.then(response => {
console.log(response);
})
.catch(error => {
console.log(error);
});
fetchRoles();
}

我每次得到的错误是:

127.0.0.1 - - [19/Aug/2019 14:12:27] "GET /account_management/roles HTTP/1.1" 401 -
Exception getting user An error occurred (InvalidParameterException) when calling the GetUser operation: 1 validation error detected: Value at 'accessToken' failed to satisfy constraint: Member must satisfy regular expression pattern: [A-Za-z0-9-_=.]+

我不明白这个错误,因为我已经根据这个正则表达式检查了身份验证令牌并且它是有效的。

可能是当你引用它时,authToken 仍然是一个承诺,你能试试这个:

import React, { useEffect } from 'react';
import { Auth } from 'aws-amplify';
useEffect(() => {
const fetchRoles = async () => {
try {
let data = await Auth.currentSession();
const authToken = await data.getAccessToken().getJwtToken();
} catch(e) {
console.log(e)
}
var config = {
headers: { Authorization: "Bearer " + authToken}
};
var bodyParameters = {
key: "value"
};
axios.get("http://127.0.0.1:5000/accounts/roles", bodyParameters, config)
.then(response => {
console.log(response);
})
.catch(error => {
console.log(error);
});
fetchRoles();
}

解决了,我觉得很笨。

作为 Axios 的新手,我从字面上复制了代码。 示例 Axios 代码用于开机自检。 我突然意识到通过bodyParameters发送有效载荷是没有意义的. 删除它和 GET 工作了!

顺便说一句,我希望这将在未来对其他人有所帮助,在身份验证令牌前面加上"持有者"是完全可选的。 这两种方法都可以正常工作:

headers: { Authorization: "Bearer " + authToken}

headers: { Authorization: authToken}

相关内容

最新更新