我正在使用npm子域名,在我的应用程序中,我有伪造子域名的路由
// looks like app.localhost:3000
router.get('/subdomain/app', app.dashboard);
所以我在子域上有一个登录页面,在非子域页面上有一个登录页面。他们不分享会话,所以我必须登录两次。我想设置redis,但我不知道如何。
// here is my session middleware, I tried using .localhost
app.use(session({ secret: 'something', domain: '.localhost', }));
我已经看到人们使用redis的地方
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
}));
这似乎可以解决我的问题,但我不知道如何设置redisStore以及配置数据来自哪里?
有人可以向我解释如何使用redis,以便当用户登录app.example.io或example.io时他/她已登录好,无需登录两次吗?
答案 0 :(得分:0)
您需要以下模块。
connect-redis
express-session
cookie-parser
然后使用以下示例代码:
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)
})
答案 1 :(得分:0)
这是我的操作方式,这是最重要的部分-域: .yourdomain.io 请确保在域之前使用该点。
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
}
})