反应与快速后端和快速应用程序的应用程序

我目前有一个React应用程序(通过create-react-app )和一个用于我的API调用的Express服务器。 他们都分开运行,一直工作正常,直到我碰到这个问题:

我也使用express-sessionpassport进行用户authentication。 我能够authentication用户,但会话不会持续在API调用之间。 如果我成功login,下次进行API调用时, req.sessionID将会不同, req.isAuthenticated()将返回false

这是我的服务器代码:

 'use strict' var express = require('express'); var path = require('path'); var bodyParser = require('body-parser'); var cookieParser = require('cookie-parser'); var mongoose = require('mongoose'); var passport = require('passport'); var session = require('express-session'); var cors = require('cors'); var flash = require('connect-flash'); var store = require('./store'); var database = require('./database'); var app = express(); var port = process.env.port || 3001; var router = express.Router(); var promise = mongoose.connect('mongodb://localhost:27017/lifeless-db', {useMongoClient: true}); //app.use(cors()); app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.json()); app.use(cookieParser('lifeless-secret-01890')); app.use(session({ secret: 'lifeless-secret-01890', saveUninitialized: true, cookie: { secure: false, } })); app.use(flash()); app.use(passport.initialize()); app.use(passport.session()); // Initialize Passport var authinit = require('./auth/init'); authinit(passport); // For debugging: app.use(function(req, res, next) { console.log("SessionID: " + req.sessionID); console.log(req.isAuthenticated() ? "This user is logged in" : "This user is NOT logged in"); next(); }); // GET app.get('/items', function(req, res) { store.getAllItems((items) => { if(!items) return res.send({error: true, message: 'Error loading store :/', items: null}); else return res.send({error: false, message: 'Success', items: items}); }); }); app.get('/login', function(req, res) { console.log(req.flash()); console.log("Login fail"); res.send({error: true, message: 'Unknown error'}); }); // POST app.post('/message', function(req, res) { database.submitMessage(req.body.email, req.body.message, (success) => { if (success) return res.send({error: false, message: 'Success'}); else return res.send({error: true, message: 'Error sending message'}); }); }); app.post('/login', passport.authenticate('local', {failureRedirect: '/login', failureFlash: true}), function(req, res) { console.log(req.flash()); console.log("Login success"); return res.send({error: false, message: 'Success'}); }); // SERVER app.listen(port, function(){ console.log('Server started.'); console.log('Listening on port ' + port); }); 

下面是一个来自React App的API调用(使用axios )的axios

 login(e) { e.preventDefault(); axios({ method: 'post', url: 'http://localhost:3001/login', data: { username: this.state.username, password: this.state.password, } }) .then((response) => { console.log(response.data); if (response.data.error) { this.setState({error: true, errmessage: response.data.message}); } else { this.setState({redirect: true}); } }) .catch((error) => { this.setState({error: true, errmessage: 'Error logging in'}); }); } 

我认为必须有某种方法让React以某种方式存储会话(?),但对于React我是相当新的,并不知道如何将它用于后端。