Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用React and express后端在浏览器上设置cookie会话?_Javascript_Node.js_Reactjs_Express_Session - Fatal编程技术网

Javascript 如何使用React and express后端在浏览器上设置cookie会话?

Javascript 如何使用React and express后端在浏览器上设置cookie会话?,javascript,node.js,reactjs,express,session,Javascript,Node.js,Reactjs,Express,Session,这是我在stackoverflow上的第一篇帖子,如果我的帖子形式怪异,我会提前道歉。我希望将会话与express会话结合使用,以在react应用程序中保持用户的连接。通过PostMan,cookie被保存,后端在使用axios执行post请求的浏览器发送(res.send(req.session))时识别用户 接收会话,但在服务器无法识别另一个调用之后 我的服务器代码: const express = require('express'); const mongoose = require('

这是我在stackoverflow上的第一篇帖子,如果我的帖子形式怪异,我会提前道歉。我希望将会话与express会话结合使用,以在react应用程序中保持用户的连接。通过PostMan,cookie被保存,后端在使用axios执行post请求的浏览器发送(res.send(req.session))时识别用户 接收会话,但在服务器无法识别另一个调用之后

我的服务器代码:

const express = require('express');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const sha1 = require('sha1');
const cors = require('cors');
const path = require('path');
const cookieParser = require('cookie-parser');
const session = require('express-session');
const React = require('react');

const app = express();const MONGOURI = "mongodb+srv://loulou00:loulou00@cluster0.2t92n.mongodb.net/User?retryWrites=true&w=majority";
//connect to mongoose db
mongoose.connect(MONGOURI, {useNewUrlParser: true})
.then(() => console.log('DB CONNECTED'))
.catch(error => console.log(error));

app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(express.static(path.join(__dirname, '../build')));
app.use(cors({credentials: true, origin: 'http://localhost:1200', exposedHeaders: ["set-cookie"],}));
let sess = {
  secret: 'keyboard cat',
  cookie: {
    maxAge: 60000
  },
  resave: true,
  saveUninitialized: true
}
 
if (app.get('env') === 'production') {
  app.set('trust proxy', 1) // trust first proxy
  sess.cookie.secure = true // serve secure cookies
}
 
app.use(session(sess))


const { Customer } = require('./models/customer');
const { response } = require('express');

//API ROUTE
app.get('/zeb', function (req, res) {
    res.send(req.session)
    console.log(req.session)
    //res.sendFile(path.join(__dirname, 'build', 'index.html'));

  });
app.get('/', (req, res) => {
    res.sendFile(path.join(__dirname, 'build', 'index.html'));
})
app.post('/api/token_add', (req, res) => {
    if (req.body.secret == 'super secret')
    {
        Customer.findOne({ name: req.body.name }, (err, response) => {
           if (!response)
           {
               const token = sha1(req.body.name)
                const customer = new Customer({
                    name: req.body.name,
                    pack: req.body.pack,
                    token: token,
                }).save((e, resp) => {
                    if(e) res.status(400).send(e);
                    res.status(200).send(resp);
                    console.log(resp);
                })
           }
           else
           {
               res.status(400).send('This name is already use')
           } 
        })
    }
    
})

app.post('/api/token_connect', (req, res) => {
    Customer.findOne({ token: req.body.token }, (err, response) => {
        if(err) res.status(400).send(err)
        if (response) {            
            req.session.token = req.body.token;
            res.status(200).send(req.session);
            console.log(req.session)
        }
        else{
            res.send('Invalid token')
        }
    })
});
app.get('/api/token_getinfo', (req, res) => {
    console.log(req.session)
    Customer.findOne({ token: req.query.token }, (err, response) => {
        if(err) res.status(400).send(err)
        if (response) {            
            
            res.status(200).send(response);
        }
        else{
            res.send('Invalid token')
        }
    })
})
app.get('/api/token_connectsess', (req, res) => {
    console.log(req.session)
    Customer.findOne({ token: req.session.token }, (err, response) => {
        if(err) res.status(400).send(err)
        if (response) {            
            res.status(200).send(req.session);
        }
        else{
            res.send('Invalid token')
        }
    })
});



const port = process.env.PORT || 1200;

app.listen(port, () => {
    console.log('Server runnin on ' + port)
})

我的axios请求:

const connect = () => {
        axios.post('http://192.168.1.24:1200/api/token_connect', {token: token}
        ,{
  
            "headers": {
        
              "content-type": "application/json",
        
            }
          }).then((res) => {
            if (res.data.token)
            {
              console.log(res.data.token);
              setUser(res.data.token)  ;
            }
            
            
        })
    }
会议:

Session {
  cookie: {
    path: '/',
    _expires: 2020-10-26T22:14:31.294Z,
    originalMaxAge: 60000,
    httpOnly: true
  },
  token: 'f7ed376ba27377ae2680fafe1a67037df80b7e36'
}

您需要将此
{withCredentials:true}
作为请求中的一个选项传递

例如:

axios.post(API_SERVER + '/login', { email, password }, { withCredentials: true })