我一直在从事后端使用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,但在生产环境中则不存在。我相信我在此配置中缺少某些东西,甚至都不知道它是什么。任何帮助将不胜感激。