React Native iOS 不添加授权标头,适用于 Android

问题描述 投票:0回答:2

我遇到一个问题,即

Authorization
标头未添加到 iOS 上的请求中,但它适用于 Android。

一开始我以为是

axios
,http 客户端,但后来我改用
fetch
来尝试,仍然不起作用。

在屏幕中有一个处理程序来发送消息:

const handleSendPress = async () => {
  await postContact(textInput);
}

以及请求函数:

export const postContact = async (message: string) => {
  // await axiosInstance.post(`${API_URL}/contact`, {
  //   message,
  // });
  await fetch(`${API_URL}/contact`, {
    method: 'POST',
    body: JSON.stringify({
      message,
    }),
    headers: {
      'Content-Type': 'application/json',
      Accept: 'application/json',
      Authorization: 'Bearer [JWT TOKEN]',
    },
  });
};

我注释掉了

axios
并硬编码了
Authorization
标头。

这在 Android 中有效,但在 iOS 上失败,服务器抱怨请求中没有

Authorization
标头。

我不明白,有什么想法吗?

react-native
2个回答
2
投票

原来 iOS 有一些保留的 HTTP 标头,

Authorization
就是其中之一,https://developer.apple.com/documentation/foundation/nsurlrequest

如果您为这些保留标头之一设置了值,系统可能会忽略您设置的值,或者用自己的值覆盖它,或者干脆不发送它。

关键词是可能,这就是为什么它通常会失败,但在某些情况下会成功。

可能有某种方法可以配置它,但我最终只是将我使用的标题更改为

X-Authorization


0
投票

我花了一天的时间...我已经完成了后端,所以如果我将授权更改为X-Authorization,我将不得不在所有前端更改此设置,这是第三个...

事实证明存在一些问题,您唯一需要做的就是在 URI 末尾添加“/”,因此在这种情况下而不是 “等待获取(

${API_URL}/contact
,”它应该是 “等待获取(
${API_URL}/contact/
,”

© www.soinside.com 2019 - 2024. All rights reserved.