node.js - 登录事件后如何使nodejs express会话中的用户ID持续存在?
问题描述
会话用户 ID 不可用,因为会话在 express nodejs 中刷新。即使它在网页刷新后重新出现。我正在使用快速会话。
我正在通过这样的外部 url 访问我的 nodejs 套接字应用程序-
socket = io.connect('https://xxx.xxx.net:3000/')
var uid = app.user.get('id');
socket.emit("login_register", { user: uid });
服务器文件代码-
var crypto = require('crypto')
const http = require('https')
const express = require('express')
const cookieParser = require('cookie-parser')
const mysql = require('mysql')
const socket = require('./socket')
const routes = require('./routes')
var bodyParser = require('body-parser');
const { sessionMiddleware } = require('./middlewares')
var app = express();
const server = http.createServer(options,app)
const io = socket(server)
io.use((socket, next) => {
sessionMiddleware(
socket.request,
socket.request.res,
next
)
})
app.use(sessionMiddleware)
app.use(express.static('public'))
app.use('/', routes)
app.use(cookieParser())
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With,
Content-Type, Accept");
next();
});
io.on('connection', socket => {
console.log('in on');
const req = socket.request
socket.on("login_register", function (data) {
x = JSON.stringify(data);
console.log('login-- '+x);
const { user } = data
req.pass = user
req.session.userID = user
console.log('loginuser-' + req.session.userID)
console.log('sessionTD-'+socket.request.sessionID);
console.log(socket.request.session);
req.session.save();
});
控制台日志数据 -
in on
sessionTD-gp0cmPbWlWrwVuMlb3wlFwEJayhNRy7D
undefined
login-- {"user":"121"}
loginuser-121
sessionTD-gp0cmPbWlWrwVuMlb3wlFwEJayhNRy7D
Session {
cookie:
{ path: '/',
_expires: null,
originalMaxAge: null,
httpOnly: true },
userID: '121' }
in on
sessionTD-Xwoa0U8QWB0d6rpuksEYWFS4rRgCTcA6
undefined
sessionTD-Xwoa0U8QWB0d6rpuksEYWFS4rRgCTcA6
Session {
cookie:
{ path: '/',
_expires: null,
originalMaxAge: null,
httpOnly: true } }
第一个会话有用户 ID,但它立即丢失。如果我刷新我的网页,它会再次出现。sessionmiddleware 具有将中间件文件中定义的快速会话保存为的代码-
const session = require('express-session')
const sessionMiddleware = session({
secret: 'secret123',
resave: true,
saveUninitialized: true
})
任何人都可以请帮助如何在第一次保存它。
解决方案
推荐阅读
- python - numpy 更新数组索引
- icalendar - iCal .ics 文件:允许用户确认
- php - 命名空间和包括脚本问题
- python - 每次触发窗口函数
- selenium - 当记录器处于从方法(类 2)调用的方法(类 1)中时,范围报告 2.41 抛出空指针
- salesforce - Salesforce 跟踪就像在 Marketing Cloud 中一样
- jsf - 过滤后的jsf输出文本
- artificial-intelligence - 传统逻辑和模糊逻辑有什么区别
- d3.js - 如何从 d3.js 的嵌套 json 文件中获取数据?
- npm - 关于 windows 中的 mocha