Я в полной растерянности с этим. Я могу только предположить, что это паспорт, потому что когда я закомментирую его инициализацию, все снова волшебным образом работает. У меня есть 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;