android - React native + Axios 不会跨请求保留 cookie

标签 android react-native fetch axios

我有一个 React native 应用程序,它与我的笔记本电脑上运行的 Node 服务器通信(http://192.168.x.x:3000)。即使在执行成功登录后,对我的服务器的后续调用也会失败并显示 401 状态。我看到服务器上没有传递任何 cookie。

一些观察:

1) 当我将代码部署到实际服务器并在调用 API 时使用正确的域 ( http://example.com ) 时,我的 React Native 应用程序运行良好。

2) 使用 postman,我能够对自己进行身份验证,并随后成功地对我的本地服务器进行 API 调用。

这是一个非常奇怪的问题,我确信我遗漏了一些小问题,但现在已经坚持了很长一段时间。

关于可以做什么的任何提示/建议?

谢谢,

最佳答案

我知道这有点旧,但如果有人仍然面临问题,我发现以下步骤为我解决了问题

  1. 包括withCredentials来自 React 应用程序的所有请求
  2. 使用了 cors middleware服务器端。请务必指定 domain(在我的例子中,我的 VM 的 IP 地址和端口)并将 credentials 设置为 true
  3. 增加 maxAge 属性——我认为默认值大约是 10 秒,所以它一直看起来我的 session 没有持续,而实际上它只是过期得太快了。

第 2 步和第 3 步的示例可能类似于:

const express = require('express');
const path = require('path');
const session = require('express-session');
const cors = require('cors')

const app = express();

// STEP 2
app.use(cors({
    credentials: true,
    origin: '192.168.0.100:3000',
    methods:['GET', 'POST', 'PUT', 'DELETE']
}));

// STEP 3
app.use(session({
    cookie: {
        maxAge: 86400000 // one day
    }
}));

编辑: 另外值得一提的是,如果您在虚拟机(像我)上运行服务器,请确保虚拟机的日期与运行您的 React 应用程序的设备的日期一致。我发现这也表现为 Axios 似乎丢失 session 的艰难方式。

关于android - React native + Axios 不会跨请求保留 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46502537/

相关文章:

java - 不可序列化对象的数组是否可序列化?

android - SwipeRefreshLayout + ViewPager,仅限制水平滚动?

android - 从 NDK 代码访问应用程序数据路径

javascript - 找不到模块 '@babel/generator' 但已安装

react-native - 在 native react 中更改包名称和应用程序名称

php - 准备好的语句获取行不返回任何内容

android - 如何根据android中的内容设置Listview项目不可点击

unit-testing - 引用错误 : __DEV__ is not defined when trying to test AsyncStorage

json - react 获取 : Getting json result but showing network error

php - mysql 获取关联数组为空错误