我使用react-native 0.50.3将令牌认证的请求发送到我的后端,遗憾的是,fetch的“授权”部分不是由fetch发送的。
我的代码如下:
async componentDidMount() {
var mytoken = await AsyncStorage.getItem('token');
fetch('http://myserver:8000/home', {
method: 'GET',
headers: {
'Accept': 'application/json',
'Origin': '',
'Content-Type': 'application/json',
'authorization': 'Bearer ' + mytoken
}
})
.then((response) => response.json())
.then((content) => {
this.state.user = content.user;
})
.done();
}
在我的服务器端,wireshark跟踪显示授权不在请求标头中:
Hypertext Transfer Protocol
GET /home/ HTTP/1.1\r\n
Host: 10.150.21.124:8000\r\n
Content-Type: application/json\r\n
Origin: \r\n
Accept: application/json\r\n
User-Agent: Expo/2.3.0.1012011 CFNetwork/893.14 Darwin/17.3.0\r\n
Accept-Language: en-us\r\n
Accept-Encoding: gzip, deflate\r\n
Connection: keep-alive\r\n
\r\n
[Full request URI: http://10.150.21.124:8000/home/]
[HTTP request 1/1]
[Response in frame: 2326]
当然,我得到服务器未经授权的401。
我的后端是安装了CORS的django API,CORS_ORIGIN_ALLOW_ALL = True
和ALLOWED_HOSTS = ['*']
。
我的开发框架元素的版本如下:
一个重要的更新,我尝试使用react-native的请求就像邮递员的魅力一样。所以问题不在服务器端。
谢谢您的帮助。
亚历克斯。
在url地址中尝试使用尾部斜杠:
fetch('http://myserver:8000/home/', {
method: 'GET',
headers: {
'Accept': 'application/json',
'Origin': '',
'Content-Type': 'application/json',
'authorization': 'Bearer ' + mytoken
}
})
.then((response) => response.json())
.then((content) => {
this.state.user = content.user;
})
.done();
通过在请求对象上添加尾部斜杠,Pooya的答案对我有用。奇怪的是因为它对postman工作没有尾随斜线因此调试的挑战。 P.S我也使用相同的堆栈,django,django REST框架(DRF)反应原生
fetch('http://mywebsite.com/posts/', {
method: 'GET',
headers: {
'Authorization': 'Bearer ' + token
}
})