0

I am using npm subdomain, inside my app I have routes that fake a subdomain

// looks like app.localhost:3000
router.get('/subdomain/app', app.dashboard);

So I have a login page on a subdomain and a login page on a non subdomain page. They don't share sessions, so I have to login twice. I want to setup redis, but I don't know how.

// here is my session middleware, I tried using .localhost
app.use(session({ secret: 'something', domain: '.localhost', }));

I have seen where people are using redis like

app.use(express.session({
    store:new RedisStore({
        host: config.redis.session.host,
        port: config.redis.session.port,
        db: config.redis.session.db
    }),
    secret: config.session_secret
}));

This seems like it could solve my issue but I have no clue how to setup a redisStore and where the config data comes from?

Can someone explain to me how to use redis so that when a user logs in on either app.example.io or example.io that he/she is logged in for good, no need to log in twice?

Michael Joseph Aubry
  • 12,282
  • 16
  • 70
  • 135

2 Answers2

0

You need to require following modules.

connect-redis
express-session
cookie-parser

Then use the following sample code:

var express = require('express');
var cookieParser = require('cookie-parser');
var session = require('express-session');
var RedisStore = require('connect-redis')(session);

var app = express();
app.use(cookieParser());
app.use(session({
    secret: "thisismysecretkey",
    store: new RedisStore({ host: 'localhost', port: 6379})
}));

app.get('/', function (req, res) {
  res.send('Hello World!')
})

var server = app.listen(3000, function () {
  var host = server.address().address
  var port = server.address().port
  console.log('Example app listening at http://%s:%s', host, port)
})

Source : How to save and retrieve session from Redis

Community
  • 1
  • 1
webcoder
  • 656
  • 6
  • 12
0

Here is how I did it, this is the most important piece - domain: .yourdomain.io Make sure to have that preceeding dot before your domain.

var express = require('express'),
  app = express(),
  cookieParser = require('cookie-parser'),
  bodyParser = require('body-parser'),
  expressSession = require('express-session'),
  sessionMiddleware = null,
  redis = require('redis'),
  conn_redis = {
    path: '/var/run/redis/redis.sock',
    socket_keepalive: true
  }
app.use(cookieParser())
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({
  extended: true
}))
const connectRedis = require('connect-redis')(expressSession),
  uid = require('uid-safe').sync
sessionMiddleware = expressSession({
  store: new connectRedis(conn_redis),
  secret: 'xxxxxxxxxxxxxxxxxxxxx',
  name: 'session_name',
  resave: false,
  rolling: true,
  saveUninitialized: false,    
  logErrors: true,
  cookie: {
    path: '/',
    domain: '.yourdomain.io'
    expires: new Date(Date.now() + 3600000),
    maxAge: 3600000
  }
})
buycanna.io
  • 1,166
  • 16
  • 18