如何让我的deserializeUserfunction在护照login后不断运行?

我用我的用户身份validation有一些麻烦。 我可以login,注册和注销,您可以从客户端认为一切都很好。 但是,我的反序列化用户函数被重复调用。 每秒几十次。 我最初并没有注意到,但是如果你login了足够长的时间,应用程序真的变慢了。 我似乎无法弄清楚。 任何帮助将不胜感激。

另外,我试过在user.js文件的末尾运行client.end(),但是这并没有解决问题。 我想知道这是不是一个交叉来源的问题。

-UPDATE – 我不怀疑这是一个CORS问题,因为我刚刚尝试从服务器端口上的静态HTML文件login,问题依然存在。

*在与服务器不同的端口上运行的前端进行响应。 Node,Express和Postgres在服务器端。

app.js

const express = require('express'), app = express(), bodyParser = require('body-parser'), cookieParser = require('cookie-parser'), expressValidator = require('express-validator'), passport = require('passport'), session = require('express-session'); require('dotenv').config(); let port = process.env.PORT || 5000; app.use((req, res, next) => { res.header('Access-Control-Allow-Credentials', true); res.header('Access-Control-Allow-Origin', 'http://localhost:3000'); res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE'); res.header('Access-Control-Allow-Headers', 'Content-Type'); next(); }); app.use(express.static('public')); app.use(cookieParser('brothersofgroove')); app.use(bodyParser.urlencoded({extended: true})); app.use(bodyParser.json()); app.use(session({ secret: 'brothersofgroove', resave: false, saveUninitialized: false, path:"/*" //NEEDED })); app.use(passport.initialize()); app.use(passport.session()); require('./passportconfig').configure(passport); app.use('/', require('./routes/auth')); app.use('/', require('./routes/general')); app.listen(port, () => { console.log(`Your server is running on PORT ${ port }.`); }) 

passportconfig.js

 const LocalStrategy = require('passport-local').Strategy; const { Client } = require('pg'); const User = require('./models/user'); function configure(passport) { const strategyFunc = function(username, password, done) { User.checkUser(username, password, function(err, user) { if (err) { console.log('Local Strategy - Error trying to authenticate.'); done(err); } else if (user) { console.log('Local Strategy - Success'); done(null, user); } else { console.log('Local Strategy - Could not find user'); done(null, false); }; }); }; passport.use(new LocalStrategy(strategyFunc)); passport.serializeUser(function(user, done) { console.log('serializeUser', user); done(null, user); }); passport.deserializeUser(function(user, done) { console.log('deserializeUser', user); const userId = user.id; const client = new Client(); client.connect().then(() => { const sql = 'SELECT * FROM backbeatuser WHERE id = $1'; const params = [userId]; return client.query(sql, params); }).then((results) => { const user = results.rows[0]; done(null, user); }).catch((err) => { throw err; }).then(() => { client.end(); }); }); }; module.exports = { configure }; 

auth.js

 const express = require('express'), bcrypt = require('bcryptjs'), { Client } = require('pg'), passport = require('passport'), router = express.Router(); const User = require('../models/user'); router.post('/login', passport.authenticate('local', { successRedirect: '/backbeat', failureRedirect: '/notloggedin', failureFlash: true })); router.post('/signup', (req, res, next) => { const firstName = req.body.firstName, lastName = req.body.lastName, email = req.body.email, username = req.body.username, password = req.body.password, city = req.body.city, skillLevel = req.body.skillLevel; const salt = bcrypt.genSaltSync(10); const passwordHash = bcrypt.hashSync(password, salt); const client = new Client(); client.connect().then(() => { const sql = ` INSERT INTO backbeatuser (first_name, last_name, email, username, password_hash, city, skill_level, onboarding_stage) VALUES ($1, $2, $3, $4, $5, $6, $7, $8) RETURNING * `; let params = [firstName, lastName, email, username, passwordHash, city, skillLevel, 0]; params = params.map((param) => { if (param === '') { param = null; }; return param; }); return client.query(sql, params); }).then((results) => { const user = results.rows[0]; }).then(() => { next(); }).catch((err) => { res.redirect('/'); }).then(() => { client.end(); }); }, passport.authenticate('local', { successRedirect: '/backbeat' })); router.post('/logout', (req, res) => { req.logout(); // res.redirect('/'); }); module.exports = router; 

user.js的

 const bcrypt = require('bcryptjs'), { Client } = require('pg'); const checkPassword = function(password, passwordHash) { return bcrypt.compareSync(password, passwordHash); } const checkUser = function(username, password, done) { const client = new Client(); client.connect().then(() => { const sql = 'SELECT * FROM backbeatuser WHERE username = $1'; const params = [username]; return client.query(sql, params); }).then((results) => { console.log('username results', results.rows); const user = results.rows[0]; if (user && checkPassword(password, user.password_hash)) { console.log('Should be a successful login'); done(null, user); } else { console.log('The user probably entered the incorrect password'); done(null, false); }; }); }; module.exports = { checkUser };