Переменная userId отсутствует в объекте сеанса - PullRequest
0 голосов
/ 27 января 2019

Я новичок в express. Я пытаюсь создать веб-сайт login,register, используя управление сессиями. Я использую express-session для управления сессиями.

используемые версии: "express": "^4.16.4", "express-session": "^1.15.6"

app.js файл сервера

const express = require("express")
const session = require("express-session")
const bodyParser = require("body-parser")
const ONE_HOUR = 1000 * 60 * 60
const {
    NODE_ENV = "development",
    SESS_NAME = "sid",
    SESS_SECRET = "kjkjs&^*%&%^(*&(*9u43jkjkl897sd",
    SESS_LIFETIME = ONE_HOUR
} = process.env
const IN_PROD = NODE_ENV === "production"
const app = express()
app.use(session({
    name: SESS_NAME,
    resave: true,
    saveUninitialized: true,
    secret: SESS_SECRET,
    cookie: {
        maxAge: SESS_LIFETIME,
        sameSite: true,
        secure: IN_PROD
    } 
}))
const cors = require("cors")
const morgan = require("morgan")
const {sequelize} = require("./models")
const config = require("./config/config")
const routes = require("./routes")

app.use(morgan("combined"))
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({
    extended: true
}))


//app.use(express.bodyParser())
app.use(cors())

routes.setRoutes(app)

//sequelize.sequelize.sync

sequelize.sync(/* {force:true} */)
    .then(()=> {
        app.listen(config.port)
        // console.log(x)
        console.log(`Server started on port ${config.port}`)
    })

А это моя реализация функций login и register:

const {User} = require("../models")
const session = require("express-session")
module.exports = {
    register : async function(req,res) {
        console.log(req.body)
        let msg = `Register request for ${req.body.email} found`
        console.log(msg)
        try {
            const user = await User.create(req.body) 
            res.send(user.toJSON())
        }catch(err) {
            // email already exits
            res.status(400).send( {
                error : "This email is alread in use"
            })
        }
    },
    login : async function(req,res) {
        console.log("===================================")
        console.log("inside the login function\n\n",req.body)
        console.log(">>>>>>>>>>>session object : ",req.session)
        const userId = req.session.userId
        console.log(">>>>>>>>>>>session Id = ",userId)
        if(!userId) {
            const { userId } = req.session  
            let msg = `Login request for ${req.body.email} found`
            console.log(msg)
            try {
                const {email,password} = req.body
                const user = await User.findOne({
                    where: {
                        email: email
                    }
                })
                if(!user) {
                    return res.status(403).send({
                        error:"The login information was wrong"
                    })
                }
                const isPasswordValid = password === user.password
                if(!isPasswordValid) {
                    return res.status(403).send({
                        error:"The login information was wrong"
                    })
                }
                /* create session */
                req.session.userId = user.id + 1
                console.log(`session created for ${user.email} with sessionId = ${req.session.userId}`)
                //req.session.save()
                const userJson = user.toJSON()
                res.send({
                    msg: "The use was found OK !!",
                    user: userJson
                })
                console.log("^^^^^^^^^^^session object : ",req.session)
            }catch(err) {
                // email already exits
                res.status(500).send( {
                    error : "This email is alread in use"
                })
            }
        }else {
            console.log(`user ${req.body.email} is already logged in`)
            res.send({
                status: "Session is already created !!"
            })
        }

    }
}

Печатает объект сеанса внутри функции login,

^^^^^^^^^^^session object :  Session {
  cookie: 
   { path: '/',
     _expires: 2019-01-27T09:31:13.078Z,
     originalMaxAge: 3600000,
     httpOnly: true,
     sameSite: true,
     secure: false },
  userId: 2 }

Но когда я пытаюсь во второй раз (в верхней части функции login), переменная userId отсутствует.

>>>>>>>>>>>session object :  Session {
  cookie: 
   { path: '/',
     _expires: 2019-01-27T09:31:13.062Z,
     originalMaxAge: 3600000,
     httpOnly: true,
     sameSite: true,
     secure: false } }

Почему это так? Я пробовал переменное решение, представленное в разных потоках SO никто не работал. Это потому что async/await? Пожалуйста, помогите!

Спасибо!

...