我有一个 React native 应用程序,它与我的笔记本电脑上运行的 Node 服务器通信(http://192.168.x.x:3000)。即使在执行成功登录后,对我的服务器的后续调用也会失败并显示 401 状态。我看到服务器上没有传递任何 cookie。
一些观察:
1) 当我将代码部署到实际服务器并在调用 API 时使用正确的域 ( http://example.com ) 时,我的 React Native 应用程序运行良好。
2) 使用 postman,我能够对自己进行身份验证,并随后成功地对我的本地服务器进行 API 调用。
这是一个非常奇怪的问题,我确信我遗漏了一些小问题,但现在已经坚持了很长一段时间。
关于可以做什么的任何提示/建议?
谢谢,
最佳答案
我知道这有点旧,但如果有人仍然面临问题,我发现以下步骤为我解决了问题
- 包括withCredentials来自 React 应用程序的所有请求
- 使用了 cors middleware服务器端。请务必指定
domain
(在我的例子中,我的 VM 的 IP 地址和端口)并将credentials
设置为 true - 增加
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/