I am a still a learner and I hope I can describe my issue well enough to be understood (bear with me).
I have an app which uses Github passport strategy. Everything was working fine until I attempted to add Redis to store the session tokens. I started getting this error. Plus, I couldn't get Redis initiated.
To start off see my dependencies
{
"name": "employee-directory",
"version": "1.0.0",
"description": "",
"main": "server.js",
"scripts": {
"start": "node server.js",
"seed": "node db/seeds.js"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"connect-redis": "^6.1.3",
"dotenv": "^8.2.0",
"express": "^4.17.1",
"express-session": "^1.17.3",
"helmet": "^5.1.0",
"multer": "^1.4.5-lts.1",
"passport": "^0.6.0",
"passport-github2": "^0.1.12",
"pg": "^8.5.1",
"redis": "^4.2.0"
}
}
Here is my redis config file
const redis = require('redis');
require('dotenv').config();
const redisClient = redis.createClient({
port: process.env.REDPORT
});
redisClient.on('error', function (err) {
console.log('Could not establish a connection with redis. ' + err);
});
redisClient.on('connect', function (err) {
console.log('Connected to redis successfully');
});
module.exports = redisClient;
My session.js file
require('dotenv').config();
const session = require('express-session');
const crypto = require('crypto');
const RedisStore = require('connect-redis')(session);
const redisClient = require('./redis');
const serverSession = session({
genid: function (req) {
return crypto.randomBytes(32).toString('hex');
},
store: new RedisStore({ client: redisClient }),
resave: false,
saveUninitialized: false,
secret: process.env.SESSION_SECRET,
cookie: { maxAge: 600000, secure: false },
});
module.exports = serverSession;
My passport.js file
require('dotenv').config();
const passport = require('passport');
const { Person } = require('../models');
const GitHubStrategy = require('passport-github2').Strategy;
const { hash } = require('../utils/crypto');
passport.serializeUser((user, done) => {
done(null, user);
});
passport.deserializeUser((user, done) => {
done(null, user);
});
passport.use(
new GitHubStrategy(
{
clientID: process.env.GITHUB_CLIENT_ID,
clientSecret: process.env.GITHUB_CLIENT_SECRET,
callbackURL: process.env.GITHUB_CLIENT_CALLBACK_URL,
},
async function (accessToken, refreshToken, profile, done) {
try {
const hashedId = hash(profile.id.toString());
const { rowCount, rows } = await Person.findUser({
github_id: hashedId
});
if (rowCount > 0) {
return done(null, rows[0]);
} else {
return done(null, { github_id: hashedId });
}
} catch (err) {
console.log(err);
}
}
)
);
My server.js file
require('dotenv').config();
const express = require('express');
const path = require('path');
const helmet = require('helmet');
const passport = require('passport');
const routes = require('./controllers');
const ContentSecurityPolicy = require('./config/helmet');
const serverSession = require('./config/session');
const hotlink = require('./utils/hotlink');
const app = express();
const PORT = process.env.PORT || 3001;
require('./config/passport');
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
// Enable the content security policy
app.use(ContentSecurityPolicy);
app.use(
helmet.referrerPolicy({
policy: 'no-referrer',
})
);
app.use(helmet.noSniff());
// enable this if you run behind a proxy (e.g. nginx)
// app.set('trust proxy', 1);
app.use(serverSession);
app.use(passport.initialize());
app.use(passport.session());
app.use(hotlink);
app.use(express.static(path.join(__dirname, '/public')));
// turn on routes
app.use(routes);
app.listen(PORT, () => {
console.log(`Server started on port: ${PORT}`);
});
Please let me know if you need more information.
Thank you so much!