My redis is causing my access token to fail

Viewed 32

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.

error message picture

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!

0 Answers
Related