Passport 在每次请求时都会抛出 500 内部服务器错误

Passport throws a 500 internal server error at every request

我对此完全不知所措。我只能假设它是护照,因为当我注释掉它的初始化时,一切都神奇地再次起作用。我目前设置了 2 条路线。一个是要求用户登录的获取请求,另一个是实际执行登录的 post 请求。

在我的 app.js 文件中,我的护照设置如下所示:

var sessionStore = new MySQLStore(options);

//handles cookie/session creation
app.set('trust proxy', 1) // trust first proxy
app.use(session({
    secret: config.sessionKey,
    resave: false,
    store:sessionStore,
    saveUninitialized: false,
    cookie: {
        //secure: true,
        maxAge:24*60*60*1000 //1 day in milliseconds
    }
}));
 app.use(passport.initialize());
 app.use(passport.session());
require('./services/passport');

//initiate route handlers
app.use('/login', require('./routes/authRoutes'));
app.use('/tiles', require('./routes/tileRoutes'));

我正在使用本地策略,因为我的用户不会使用任何类型的社交应用程序登录。我配置了另一个文件 passport.js 来实际处理护照设置。我正在使用 sequelize 数据库来验证用户。整个过程如下所示:

const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
const bcrypt = require('bcrypt');


passport.serializeUser((user, done)=>{
    done(null, user.id);
});

passport.deserializeUser((user, done)=>{
    done(null, user.id);
});
passport.use(new LocalStrategy(function (username, password, done) {
    const db = require('../models');
    db.user.findOne({ where: {username: username} })
        .then((user)=>{
            if(!user){
                return done(null, false);
            }else{
                // if(user.dataValues.hashed_password === password)
                //     return done(null, user);
                bcrypt.compare(password, user.dataValues.hashed_password, function(err, res) {
                      if(res === true){
                          return done(null, user);
                      }else{
                          return done(null, err);
                      }
                });

            }
        });

}));

注册人员、创建会话和存储会话 ID 似乎都在发生,但是当我开始使用 axios 在我的前端发出 get/post 请求时(我正在使用反应)我不断收到内部服务器错误。我已经尝试用我能想到的任何方式捕捉到它,在确定的点中断,console.logging out 但我只得到相同的消息:

[0] GET /tiles 500 8.049 ms - 2
[0] GET /tiles 500 2.757 ms - 2

或从控制台

GET http://localhost:3000/tiles/ 500 (Internal Server Error)

实际的获取请求看起来像这样(在我知道它有效之前我还没有投入太多):

const express = require('express');
const router = express.Router();

router.get('/', isLoggedIn, (req, res)=>{
    debugger;
    res.send({hi:'there'})
});


function isLoggedIn(req, res, next) {
    debugger;
        if (req.isAuthenticated()) return next();
        console.log('failure');
        res.redirect('/login')
}

module.exports=router;

deserializeUser这里应该调用id查找用户的函数,然后传给done,第一个参数是userId as serializeUser return user.id 到会话存储。示例:

passport.deserializeUser((id, done)=>{
  passport.deserializeUser((id, done) => {
    User.findById(id).then((user) => {
      done(null, user);
    }).catch(done);
  });
});