Как сделать, чтобы идентификатор пользователя в экспресс-сеансе nodejs сохранялся после события входа в систему? - PullRequest
0 голосов
/ 08 октября 2018

ИД пользователя сеанса недоступен, так как сеанс обновляется в экспресс-узле jj.Даже если он появляется после обновления веб-страницы.Я использую экспресс-сеанс.

Я получаю доступ к своему приложению сокета nodejs через внешний URL-адрес, например:

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 } }

Первый сеанс имеет идентификатор пользователя, но он немедленно теряется.Если я обновлю свою веб-страницу, она появится снова.В sessionmiddleware есть код для сохранения экспресс-сессии, определенный в файле промежуточного программного обеспечения как -

 const session = require('express-session')
 const sessionMiddleware = session({
    secret: 'secret123',
    resave: true,
    saveUninitialized: true 
 })

Может кто-нибудь помочь, как сохранить его в первый раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...