Cookie不会在react和express.js中转移

时间:2019-12-07 08:50:14

标签: reactjs express cors react-apollo apollo-client

我一直在从事后端使用express和apollo服务器而前端使用react js的项目。在本地,服务器运行在端口2000上,react js运行在3000上,一切似乎都很好。在构建我的react应用后,我复制了所有内容并将其放置在服务器的公用文件夹中,但是在将它们上传到远程服务器后,由于无法传输会话ID,用户无法进行身份验证

这是我在React应用中配置基本URL的方式。

App.js

let BASE_URL = ''
let WS_BASE_URL = ''
let credentials = '';

if (process.env.NODE_ENV === 'production') {
    BASE_URL = 'https://example.com/graphql'
    WS_BASE_URL = 'wss://example.com/graphql'
} else {
    BASE_URL = 'http://localhost:2000/graphql'
    WS_BASE_URL = 'ws://localhost:2000/graphql'
    credentials = 'include'
}

// Create an http link:
const httpLink = new HttpLink({
    uri: BASE_URL,
    credentials,
})

// Create a WebSocket link:
const wsLink = new WebSocketLink({
    uri: WS_BASE_URL,
    options: {
        reconnect: true,
    },
})

这就是我在服务器中配置cors和session的方式

server.ts

    const app = express();

    app.use(cors({
        credentials: process.env.NODE_ENV !== "production",
        origin: ['http://localhost:3000'] //React app.
    }));

    app.use(session({
        store,
        name: COOKIE_NAME,
        secret: config.get('session_secret'),
        resave: false,
        saveUninitialized: false,
        cookie: {
            httpOnly: true,
            secure: process.env.NODE_ENV === "production",
            maxAge: 1000 * 60 * 60 * 24 * 30 // 1 month
        }
    }));

在本地时,当我检查网络请求时可以看到会话ID,但在生产环境中则不存在。我相信我在此配置中缺少某些东西,甚至都不知道它是什么。任何帮助将不胜感激。

0 个答案:

没有答案