refactor: migrate to jwt sessions instead of store sessions

This commit is contained in:
MTG2000
2022-06-09 12:28:34 +03:00
parent d8fd6e1432
commit 435fc7f844
14 changed files with 257 additions and 234 deletions

View File

@@ -1,52 +1,19 @@
const express = require('express');
const session = require("express-session");
const passport = require("passport");
const lnurlAuth = require("passport-lnurl-auth");
var cors = require('cors');
const { SESSION_SECRET } = require('../utils/consts');
const createGlobalModule = require('../utils/createGlobalModule');
const sessionsStore = require('./sessions-store');
const cookieParser = require('cookie-parser');
const createExpressApp = (router) => {
const app = express();
const routerBasePath = process.env.LOCAL ? `/dev` : `/.netlify/functions`
app.use(cookieParser());
app.use(cors({
origin: ['http://localhost:3000', 'https://studio.apollographql.com'],
credentials: true,
}))
app.use(session({
secret: SESSION_SECRET,
resave: false,
store: sessionsStore,
saveUninitialized: true,
cookie: {
maxAge: 30 * 24 * 60 * 60 * 1000 // 30 days
}
}));
passport.use(new lnurlAuth.Strategy(function (linkingPublicKey, done) {
// The user has successfully authenticated using lnurl-auth.
// The linked public key is provided here.
// You can use this as a unique reference for the user similar to a username or email address.
const user = { id: linkingPublicKey };
done(null, user);
}));
app.use(passport.initialize());
app.use(passport.session());
app.use(passport.authenticate("lnurl-auth"));
passport.serializeUser(function (user, done) {
done(null, user?.id);
});
passport.deserializeUser(function (id, done) {
done(null, { id } || null);
});
if (router)
app.use(routerBasePath, router);

View File

@@ -1,8 +1,6 @@
const createExpressApp = require("./express-app");
const sessionsStore = require("./sessions-store");
module.exports = {
createExpressApp,
sessionsStore,
}

View File

@@ -1,19 +0,0 @@
const createGlobalModule = require("../utils/createGlobalModule");
let sessionsStore;
const createSessionStore = () => {
const session = require("express-session");
var Store = require('connect-pg-simple')(session);
console.log("New Sessions Store");
return new Store({
createTableIfMissing: true,
tableName: "user_sessions",
})
}
sessionsStore = createGlobalModule('sessions-store', createSessionStore);
module.exports = sessionsStore;