Паспорт выдает 500 внутренних ошибок сервера при каждом запросе - PullRequest
0 голосов
/ 10 мая 2018

Я в полной растерянности с этим. Я могу только предположить, что это паспорт, потому что когда я закомментирую его инициализацию, все снова волшебным образом работает. У меня есть 2 маршрута в настоящее время. Одним из них является запрос на получение, который требует входа пользователя в систему, а другим - запрос на публикацию, который фактически выполняет вход в систему.

в моем файле 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);
                      }
                });

            }
        });

}));

регистрация людей, создание сеанса и сохранение идентификатора сеанса, кажется, все происходит, однако, когда я начинаю делать запросы get / post на моем внешнем интерфейсе с помощью axios (я использую реагирование), я постоянно получаю внутренний сервер ошибка. Я пытался поймать это всеми возможными способами, ломая в определенных точках консоль.Выход, но я просто получаю то же сообщение:

[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)

фактический запрос get выглядит следующим образом (я не много вкладывал, пока не узнал, что он работает):

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;

1 Ответ

0 голосов
/ 10 мая 2018

deserializeUser должен вызвать функцию, чтобы найти пользователя по идентификатору, а затем передать ее в готово, первый параметр - userId, так как serializeUser возвращает user.id в хранилище сеансов. Пример:

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