我与React、Express、MongoDB的应用程序。
我想为Axios post请求传递带有标头的身份验证令牌。
但是,当我试图通过它,得到403错误(禁止)。
本地存储
我正在从本地存储中检索所有身份验证数据
export function authHeader() {
// return authorization header with basic auth credentials
let user = JSON.parse(localStorage.getItem('user'));
if (user && user.token) {
return { Authorization: `Bearer ${user.token}` };
} else {
return {};
}
}
Axios。邮递
我在这里调用axios post请求
import React, { Component } from 'react'
import Axios from 'axios';
import { authHeader } from '../../../helpers'
export default class SubAdmin extends Component {
constructor(props) {
super(props)
this.state = {
user: {},
users: [],
error: null,
isLoaded: false,
items: []
}
};
componentDidMount() {
this.setState({
user: JSON.parse(localStorage.getItem('user')),
users: { loading: true }
});
Axios.post('http://localhost:4200/api/viewSubAdmin',
{
headers: authHeader()
}).then(
result => {
console.log(result);
this.setState({
isLoaded: true,
items: result.data
});
},
error => {
this.setState({
isLoaded: true,
error
});
}
);
}
API头和响应
这是我从浏览器中得到的响应
Request URL: http://localhost:4200/api/viewSubAdmin
Request Method: POST
Status Code: 403 Forbidden
Remote Address: [::1]:4200
Referrer Policy: no-referrer-when-downgrade
Access-Control-Allow-Origin: *
Connection: keep-alive
Content-Length: 9
Content-Type: text/plain; charset=utf-8
Date: Mon, 23 Mar 2020 10:04:33 GMT
ETag: W/"9-PatfYBLj4Um1qTm5zrukoLhNyPU"
X-Powered-By: Express
Accept: application/json, text/plain, */*
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
Connection: keep-alive
Content-Length: 171
Content-Type: application/json;charset=UTF-8
Host: localhost:4200
Origin: http://localhost:3000
Referer: http://localhost:3000/
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-site
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36
{headers: {,…}}
headers: {,…}
Authorization: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhZG1pbiI6IjEyMzQ1Njc4OSIsImlhdCI6MTU4NDk1MDM3MH0.Bk4q3qEsVrA8TDn7Bbk5M689B-6uVfg4r9FTmfDTWc4"
我的邮递员电话打得很好
POST: http://localhost:4200/api/viewSubAdmin
Headers: Authorization:"Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhZG1pbiI6IjEyMzQ1Njc4OSIsImlhdCI6MTU4NDk1MDM3MH0.Bk4q3qEsVrA8TDn7Bbk5M689B-6uVfg4r9FTmfDTWc4",
Response Body: {
"subadmin_details": [
[
{
"isBlocked": false,
"_id": "5e5749872eb4ab0ff5c037f9",
"name": "abcd",
"password": "123456",
"admintype": "subadmin"
},
{
"isBlocked": false,
"_id": "5e574b4a2eb4ab0ff5c037fb",
"name": "abcde",
"password": "123456",
"admintype": "subadmin"
},
{
"isBlocked": false,
"_id": "5e57c2b7fe57bc7a7165cd64",
"name": "12345678",
"password": "12345678",
"admintype": "subadmin",
"__v": 0
},
{
"isBlocked": false,
"_id": "5e57c31594c9287afdf186f9",
"name": "1234567",
"password": "1234567",
"admintype": "subadmin",
"__v": 0
},
{
"isBlocked": false,
"_id": "5e57c3266dfbde7b1507453a",
"name": "123456",
"password": "123456",
"admintype": "subadmin",
"__v": 0
}
]
]
}
你的代码有一点错误,我已经修改了你的代码。请用以下代码替换您的axios呼叫并检查
Axios.post('http://localhost:4200/api/viewSubAdmin',{
headers: authHeader()
}).then(result => {
console.log(result)
this.setState({
isLoaded: true,
items: result.data
})
}).catch(error => {
this.setState({
isLoaded: true,
error
})
});
xios.post按顺序接收url、数据和标头。如果只传递url
和头
,则必须将null
作为data
传递
axios.post(url, null, headers)
或者您可以尝试axiosapi
Axios({
method: 'post',
url: 'http://localhost:4200/api/viewSubAdmin',
headers: authHeader()
}).then.....
我正在尝试使用JWT身份验证设置一个简单的Angularjs应用程序。 我给新注册的用户发了一封带有jwt令牌链接的邮件,以验证该邮件是否存在。链接如下所示: < code > http://127 . 0 . 0 . 1:3000/verify email/eyj 0 exaioijkv 1 qilchbgcioijiuzi 1 nij 9 . eyj 1c 2 vytmftzsi 6 injp
我使用springfox 2.9.2我有这样的api: 女巫来自身份验证服务器。我尝试在swagger中首次调用此服务器,并将其传递给像上面这样的控制器请求。所以我做 在Swagger ui上,授权调用成功返回了令牌,但它没有将令牌添加到请求头中。它会产生 如果我像这样设置令牌:
问题内容: 我一直在尝试使用axios向National Park Service API发出GET请求,并尝试了几种方法将请求标头中的API密钥设置为无效。任何帮助将不胜感激。 我努力了: 和 都返回401。当我在Postman中发送GET请求时工作,我在密钥字段中输入Authorization,在值字段中输入我的API密钥。 谢谢。 问题答案: 此问题是由浏览器中的CORS OPTIONS请求
我有一个请求URI和一个令牌。如果我使用: 等等,我得到一个200并查看相应的JSON数据。所以,我安装了请求,当我试图访问这个资源时,我得到了一个403,可能是因为我不知道传递该令牌的正确语法。有人能帮我弄清楚吗?这就是我所拥有的: 我已经试过了: 但这些都不管用。
我们不允许寻求书籍、工具、软件库等推荐的问题。你可以编辑这个问题,以便用事实和引用来回答。 我正在通过DRF(Django-rest-framework)实现令牌认证。到目前为止,我知道在令牌认证中,您用服务器已经为每个用户生成的令牌来交换您的凭证。然后,您将该令牌放在API的每个请求头中,而不用担心cookies。 现在我知道如何生成令牌并写入视图以进行身份验证和颁发令牌。但是,我还没有弄清楚如
我在项目中使用spring security oauth。通过在spring security ResourceServerConfigurerAdapter中配置,我将一些URL从身份验证中排除。我添加了。 现在,我看到的是,如果我不将授权头传递给这些URL,它就没有经过身份验证。API被正确调用。 如果调用使用授权标头进行,则它会验证令牌,如果令牌未验证,则调用失败。 我的问题是,我需要做些什