node.js - 会话令牌未存储且无法从浏览器查看
问题描述
我正在尝试为我正在开发的应用程序设置用户 ID 的会话存储,但我无法终生使用快速会话。
我查看了大量堆栈溢出帖子、教程和其他网站,并按照那里的所有说明进行操作,但无济于事。cookie 甚至不会出现在浏览器中。我也尝试过更改 .use 的顺序,但没有其他位置有效。
这是代码
const session = require('express-session');
const cookieParser = require('cookie-parser');
const App = require('./app');
var app = new App();
const server = express();
const port = process.env.PORT || 3030;
server.use(cors());
server.use(express.static(path.join(__dirname, buildPath)));
server.use(cookieParser());
server.use(session({
key: 'user_sid',
secret: 'somerandonstuffs',
resave: false,
saveUninitialized: false,
cookie: {
maxAge: 10000,
secure: false,
ttpOnly: false
}
}));
server.use((req, res, next) => {
console.log(req.cookies);
console.log(req.session);
if (req.cookies.user_sid && !req.session.user) {
res.clearCookie('user_sid');
}
next();
});
server.get('/api/userRole', async (req, res, next) => {
try {
const role = await app.userRole(req.query.userID, req.query.email);
res.send({ role });
req.session.user = req.query.userID; //assign
}
catch (error) {
next(error);
}
});
server.get('/api/music', async (req, res, next) => {
try {
console.log(req.session.user) //returns undefined
const uid = req.query.user;
app.checkAuth(uid, app.constants.roles.member);
const music = await app.music(req.query.status);
res.send(music);
}
catch (error) {
next(error);
}
});
这是控制台日志的结果
{}
Session {
cookie:
{ path: '/',
_expires: 2019-07-19T22:01:58.342Z,
originalMaxAge: 10000,
httpOnly: false,
secure: false } }
{}
Session {
cookie:
{ path: '/',
_expires: 2019-07-19T22:01:58.387Z,
originalMaxAge: 10000,
httpOnly: false,
secure: false } }
undefined
作为回应,我似乎得到的一切都是未定义的。知道可能出了什么问题吗?提前感谢您的帮助。
解决方案
您需要为express-session.
最简单的设置是session-file-store设置存储选项,但我建议在生产环境中使用connect-redis 之类的东西。
然后,您将会话存储实例传递给如下express-session
选项:
var session = require('express-session');
var FileStore = require('session-file-store')(session);
var fileStoreOptions = {};
app.use(session({
store: new FileStore(fileStoreOptions),
secret: 'keyboard cat'
}));
推荐阅读
- batch-file - 使用 7 zip 命令行解压缩时重命名文件
- vb6-migration - 在 Windows 10 中注册 GRAPH32.OCX
- c# - 具有多个微服务实例的重复数据
- linux - 编译 aarch64 二进制 bash 脚本
- python-3.x - 为什么 GCP Pub/Sub 订阅无法确认消息?
- webdav - 如何使用 OpenOffice 进行 WebDAV PROPFIND 响应和协议
- reactjs - 使用 Jest + Enzyme 在 React 组件中导入的模拟节点模块
- debugging - 调试纯方法链
- javascript - 尽管有 V8 的闪烁调度程序,为什么频繁的垃圾收集会导致 UI 卡顿?
- javascript - 多个段落的随机颜色功能