我遇到的问题很简单:
- 我在前端使用Nuxt.js SSR Heroku应用程序,该应用程序代理对Python API Heroku应用程序的请求
-
connect.sid
会话cookie出现在本地开发人员工作中 - 由于某种原因,当推送到Heroku进行登台或生产时,
connect.sid
cookie不会不出现。
我使用connect.sid
cookie的目标是拥有一个HttpOnly
cookie,该cookie无法被前端修改,以便我可以安全地对用户进行身份验证。
此设置通常基于此模板,该模板为Nuxt.js和flask堆栈(https://github.com/danjac/nuxt-python-secure-example)设置了安全的身份验证流。
以下是我的server.js
代码:
const { Nuxt,Builder } = require('nuxt')
const bodyParser = require('body-parser')
const session = require('express-session')
// const cookieParser = require('cookie-parser')
const csurf = require('csurf')
const proxy = require('http-proxy-middleware')
const axios = require('axios')
const app = require('express')()
const redis = require('redis')
const RedisStore = require('connect-redis')(session);
let config = require('./nuxt.config')
const isRemote = ['production','test'].includes(process.env.NODE_ENV)
if (!isRemote) {
require('dotenv').config()
}
const API_URL = process.env.API_URL
const redisClient = (() => {
if (isRemote) {
return redis.createclient(process.env.REDIS_URL)
} else {
return redis.createclient({
host: process.env.REDIS_HOST,port: process.env.REDIS_PORT
})
}
})()
app.use(session({
name: 'some_session',store: new RedisStore({client: redisClient}),secret: process.env.SECRET_SESSION_KEY,resave: false,saveUninitialized: true,cookie: {
path: "/",maxAge: 1000 * 60 * 60 * 24,secure: true,httpOnly: true
}
}))
app.use(bodyParser.json())
app.use(csurf({ cookie: false }))
我看了其他一些问题(例如this和this),但似乎根本无法解决这个问题。
还涉及的是,Redis会填充许多条目,以供单次访问该页面。下图仅是对服务器的3个请求之后。
弄清为什么connect.sid
除了dev之外什么都不出现,但我也想弄清楚Redis中的多个会话条目是否与此问题有关。
我设置的session
错误吗?我缺少一些中间件来完成这项工作吗?