提问者:小点点

设置cookie后,节点终结点停止工作


我已经为这个问题纠结了一段时间了。首先,在我的本地PC上,所有的东西都很好用,这使得测试更加困难。当我把网站上传到我们的公共网站时,它就中断了。我可以很好地登录并得到一个饼干。但在那之后,我的所有endpoint都停止工作。“网络”选项卡不显示它们的请求或响应。我用邮递员测试过。我可以访问所有的endpoint,直到我登录并获得一个cookie。然后我再也打不到那些endpoint了,它只是在旋转。如果我删除了cookie,我可以再打他们一次。所以它必须与我在节点服务器中设置cookie或检查cookie的方式有关。

下面是我的主要app.js节点服务器文件。如果需要其他文件,请告诉我。

const createError = require('http-errors');
const express = require('express');
const cookieParser = require('cookie-parser');
const logger = require('morgan');
const passport = require('passport');
const session = require('express-session');
const flash = require('connect-flash');
const cors = require('cors');
const MySQLStore = require('express-mysql-session')(session);
const config = require('./config/config');

// MySql Store setup
const options = {
    host: config.host,
    port: config.port,
    user: config.username,
    password: config.password,
    database: config.database
};

const sessionStore = new MySQLStore(options);

const app = express();

// Middleware
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser(config.session_secret));
app.use(cors());
app.options('*', cors());

// app.use(function(req, res, next) {
//  res.header('Access-Control-Allow-Origin', '*');
//  res.header(
//      'Access-Control-Allow-Headers',
//      'Origin, X-Requested-With, Content-Type, Accept'
//  );
//
//  next();
// });
//
// app.use(function(req, res, next) {
//  res.setHeader('Access-Control-Allow-Origin', '*');
//  res.setHeader(
//      'Access-Control-Allow-Methods',
//      'GET, POST, PUT, DELETE'
//  );
//  res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
//  res.setHeader('Access-Control-Allow-Credentials', true);
//  next();
// });

// session setup
app.set('trust proxy', 1); // trust first proxy
app.use(
    session({
        secret: config.session_secret,
        resave: false,
        saveUninitialized: false,
        store: sessionStore,
        name: 'reg-portal-cid',
        cookie: {
            secure: false,
            httpOnly: false,
            maxAge: 1000 * 60 * 60 * 24 * 365
        }
    })
);
app.use(flash());

require('./API_Gateways/passport')(passport);

// passport authentication
app.use(passport.initialize());
app.use(passport.session());

// user identification
app.use(require('./middleware/user_identification'));

app.use('/auth', require('./API_Gateways/Auth_Routes'));

// Application Gateways
// app.use('/api', function(req, res) {
//  return res
//      .status(200)
//      .json({ message: 'Success! Base API endpoint.' });
// });

app.use('/users', require('./API_Gateways/User_Gateway'));
app.use('/customers', require('./API_Gateways/Customer_Gateway'));
app.use('/SDS', require('./API_Gateways/SDS_Gateway'));
app.use('/chemicals', require('./API_Gateways/Chemical_Gateway'));
app.use('/PDF', require('./API_Gateways/PDF_Gateway'));

app.get('/', (req, res) => {
    return res
        .status(200)
        .send(
            '<h1>This is the Node server for the Registration Portal.</h1>'
        );
});

// Logout Route
app.post('/logout', (req, res) => {
    console.log('app logout route');
    sessionStore.destroy(req.sessionID, (err) => console.log(err));
    req.logout();
    req.session.destroy();
    res.clearCookie('reg-portal-cid');
    // res.clearCookie('connect.sid');
    return res.status(200).json({ message: 'User Logged Out' });
});

// catch 404 and forward to error handler
app.use(function(req, res, next) {
    next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
    // set locals, only providing error in development
    res.locals.message = err.message;
    res.locals.error = req.app.get('env') === 'development' ? err : {};

    // render the error page
    res.status(err.status || 500);
});

process
    .on('unhandledRejection', (reason, p) => {
        console.error(reason, 'Unhandled Rejection at Promise', p);
    })
    .on('uncaughtException', (err) => {
        console.error(err, 'Uncaught Exception thrown');
        //process.exit(1);
    });

module.exports = app;

另外,如果这有帮助的话,在我用邮递员登录并有一个曲奇后,我点击登出路线,它就会坐在那里旋转。当我在Postman中点击cancel时,我的节点服务器终端打印出post/logout--ms--,它告诉我它被点击了。


共1个答案

匿名用户

该问题似乎与浏览器中的缓存有关,因为浏览器的network选项卡中没有请求。

为了排除这一点,你可以尝试打开网站在一个隐姓埋名标签和尝试?