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

时间:2017-09-30 12:04:32

标签: android react-native fetch axios

我有一个本机应用程序,它与我的笔记本电脑上运行的节点服务器(http://192.168.x.x:3000)对话。即使在成功登录后,对我的服务器的后续调用也会失败,并显示401状态。我发现服务器上没有传递cookie。

一些观察结果:

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

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

这是一个非常奇怪的问题,我相信我错过了一些小事,但现在已经坚持了很长时间。

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

谢谢,

1 个答案:

答案 0 :(得分:0)

我知道这有点老了,但是如果有人仍然遇到问题,我发现以下步骤可以为我解决

  1. 在来自React应用的所有请求中包括withCredentials
  2. 使用了cors middleware服务器端。确保指定domain(在我的情况下,是我的VM的IP地址和端口),并将credentials设置为true
  3. 增加maxAge属性-我认为默认值大约是10秒,因此看起来好像我的会话并没有持续,而实际上它的过期时间太快了。

第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似乎丢失会话。