Node.js Nodejs-req.session不持久

Node.js Nodejs-req.session不持久,node.js,express,session-cookies,nuxt.js,express-session,Node.js,Express,Session Cookies,Nuxt.js,Express Session,我正在尝试使用和实现登录功能。只要不刷新页面,一切正常。重新加载页面后,会话中没有保存任何内容。我使用将会话保存在mongodb集合中,这样可以正常工作。调试=快速会话返回:快速会话未发送SID server/index.js app.use(cors({ origin: ['http://localhost:3000'], methods: ['GET', 'POST', 'DELETE', 'PUT', 'PATCH'], allowedHeaders: ['Content-Ty

我正在尝试使用和实现登录功能。只要不刷新页面,一切正常。
重新加载页面后,会话中没有保存任何内容。我使用将会话保存在mongodb集合中,这样可以正常工作。

调试=快速会话返回:
快速会话未发送SID


server/index.js

app.use(cors({
  origin: ['http://localhost:3000'],
  methods: ['GET', 'POST', 'DELETE', 'PUT', 'PATCH'],
  allowedHeaders: ['Content-Type', 'Authorization', 'X-Requested-With', 'Accept', 'Origin'],
  exposedHeaders: 'Authorization',
  credentials: true
}))

app.use(session({
  secret: process.env.JWT_SECRET,
  resave: false,
  saveUninitialized: false,
  cookie: { 
    httpOnly: true,
    secure: false,
    maxAge: 1000 * 60 * 60 * 24 * 30 // ~1 month 
  },
  store: new MongoStore({ mongooseConnection: mongoose.connection })
})) 

// Import API Routes
app.use('/api', api)
// POST /users/login
router.post('/users/login', async (req, res) => {
  try {
    const body = _.pick(req.body, ['email', 'password']);
    const user = await User.findByCredentials(body.email, body.password);
    const token = await user.generateAuthToken();
    req.session['token'] =  'Bearer ' + token;
    req.session['user'] =  user;
    console.log(req.session.token, req.session.user); //Output1
    res.set('Authorization', 'Bearer ' + token);
    res.send(user);
  } catch (err) {
    res.status(401).json({ message: "Incorrect credentials" });
  }
});

/*
Output1 (shortened for readibility)
Bearer eyJhbGciOiJIUzI1NiI.... { 
  _id: 5d5c45c273bad91bfb26fc3d,
  name: 'username',
  slug: 'username',
  email: 'e@mail.com',
  password:
   '$2a$10$SCrA8L...',
  tokens:
   [ { _id: 5d5c467673bad91bfb26fc3f,
       access: 'auth',
       token:
        'eyJhbGciOiJIUzI1NiI.....' } ],
  createdAt: 2019-08-20T19:10:58.770Z,
  updatedAt: 2019-08-20T19:13:58.415Z,
  __v: 2 }
*/
export const actions = {
  async nuxtServerInit ({ commit }, { req }) {
    console.log(req.session) // Output2
    console.log('user: ' + req.session.user, req.session.token) //Output3
    if (req.session.user && req.session.token) {
      commit('auth/SET_USER', req.session.user)
      commit('auth/SET_TOKEN', req.session.token)
    }
  }
}

/* 
Output2 (no user or token included)
Session {
  cookie:
   { path: '/',
     _expires: 2019-09-19T19:10:44.967Z,
     originalMaxAge: 2592000000,
     httpOnly: true,
     secure: false } }

Output3
user: undefined undefined
*/
axios: {
    prefix: '/api',
    credentials: true,
    https: false
  }
server/api/users.js

app.use(cors({
  origin: ['http://localhost:3000'],
  methods: ['GET', 'POST', 'DELETE', 'PUT', 'PATCH'],
  allowedHeaders: ['Content-Type', 'Authorization', 'X-Requested-With', 'Accept', 'Origin'],
  exposedHeaders: 'Authorization',
  credentials: true
}))

app.use(session({
  secret: process.env.JWT_SECRET,
  resave: false,
  saveUninitialized: false,
  cookie: { 
    httpOnly: true,
    secure: false,
    maxAge: 1000 * 60 * 60 * 24 * 30 // ~1 month 
  },
  store: new MongoStore({ mongooseConnection: mongoose.connection })
})) 

// Import API Routes
app.use('/api', api)
// POST /users/login
router.post('/users/login', async (req, res) => {
  try {
    const body = _.pick(req.body, ['email', 'password']);
    const user = await User.findByCredentials(body.email, body.password);
    const token = await user.generateAuthToken();
    req.session['token'] =  'Bearer ' + token;
    req.session['user'] =  user;
    console.log(req.session.token, req.session.user); //Output1
    res.set('Authorization', 'Bearer ' + token);
    res.send(user);
  } catch (err) {
    res.status(401).json({ message: "Incorrect credentials" });
  }
});

/*
Output1 (shortened for readibility)
Bearer eyJhbGciOiJIUzI1NiI.... { 
  _id: 5d5c45c273bad91bfb26fc3d,
  name: 'username',
  slug: 'username',
  email: 'e@mail.com',
  password:
   '$2a$10$SCrA8L...',
  tokens:
   [ { _id: 5d5c467673bad91bfb26fc3f,
       access: 'auth',
       token:
        'eyJhbGciOiJIUzI1NiI.....' } ],
  createdAt: 2019-08-20T19:10:58.770Z,
  updatedAt: 2019-08-20T19:13:58.415Z,
  __v: 2 }
*/
export const actions = {
  async nuxtServerInit ({ commit }, { req }) {
    console.log(req.session) // Output2
    console.log('user: ' + req.session.user, req.session.token) //Output3
    if (req.session.user && req.session.token) {
      commit('auth/SET_USER', req.session.user)
      commit('auth/SET_TOKEN', req.session.token)
    }
  }
}

/* 
Output2 (no user or token included)
Session {
  cookie:
   { path: '/',
     _expires: 2019-09-19T19:10:44.967Z,
     originalMaxAge: 2592000000,
     httpOnly: true,
     secure: false } }

Output3
user: undefined undefined
*/
axios: {
    prefix: '/api',
    credentials: true,
    https: false
  }
store/index.js

app.use(cors({
  origin: ['http://localhost:3000'],
  methods: ['GET', 'POST', 'DELETE', 'PUT', 'PATCH'],
  allowedHeaders: ['Content-Type', 'Authorization', 'X-Requested-With', 'Accept', 'Origin'],
  exposedHeaders: 'Authorization',
  credentials: true
}))

app.use(session({
  secret: process.env.JWT_SECRET,
  resave: false,
  saveUninitialized: false,
  cookie: { 
    httpOnly: true,
    secure: false,
    maxAge: 1000 * 60 * 60 * 24 * 30 // ~1 month 
  },
  store: new MongoStore({ mongooseConnection: mongoose.connection })
})) 

// Import API Routes
app.use('/api', api)
// POST /users/login
router.post('/users/login', async (req, res) => {
  try {
    const body = _.pick(req.body, ['email', 'password']);
    const user = await User.findByCredentials(body.email, body.password);
    const token = await user.generateAuthToken();
    req.session['token'] =  'Bearer ' + token;
    req.session['user'] =  user;
    console.log(req.session.token, req.session.user); //Output1
    res.set('Authorization', 'Bearer ' + token);
    res.send(user);
  } catch (err) {
    res.status(401).json({ message: "Incorrect credentials" });
  }
});

/*
Output1 (shortened for readibility)
Bearer eyJhbGciOiJIUzI1NiI.... { 
  _id: 5d5c45c273bad91bfb26fc3d,
  name: 'username',
  slug: 'username',
  email: 'e@mail.com',
  password:
   '$2a$10$SCrA8L...',
  tokens:
   [ { _id: 5d5c467673bad91bfb26fc3f,
       access: 'auth',
       token:
        'eyJhbGciOiJIUzI1NiI.....' } ],
  createdAt: 2019-08-20T19:10:58.770Z,
  updatedAt: 2019-08-20T19:13:58.415Z,
  __v: 2 }
*/
export const actions = {
  async nuxtServerInit ({ commit }, { req }) {
    console.log(req.session) // Output2
    console.log('user: ' + req.session.user, req.session.token) //Output3
    if (req.session.user && req.session.token) {
      commit('auth/SET_USER', req.session.user)
      commit('auth/SET_TOKEN', req.session.token)
    }
  }
}

/* 
Output2 (no user or token included)
Session {
  cookie:
   { path: '/',
     _expires: 2019-09-19T19:10:44.967Z,
     originalMaxAge: 2592000000,
     httpOnly: true,
     secure: false } }

Output3
user: undefined undefined
*/
axios: {
    prefix: '/api',
    credentials: true,
    https: false
  }
numxt.config.js

app.use(cors({
  origin: ['http://localhost:3000'],
  methods: ['GET', 'POST', 'DELETE', 'PUT', 'PATCH'],
  allowedHeaders: ['Content-Type', 'Authorization', 'X-Requested-With', 'Accept', 'Origin'],
  exposedHeaders: 'Authorization',
  credentials: true
}))

app.use(session({
  secret: process.env.JWT_SECRET,
  resave: false,
  saveUninitialized: false,
  cookie: { 
    httpOnly: true,
    secure: false,
    maxAge: 1000 * 60 * 60 * 24 * 30 // ~1 month 
  },
  store: new MongoStore({ mongooseConnection: mongoose.connection })
})) 

// Import API Routes
app.use('/api', api)
// POST /users/login
router.post('/users/login', async (req, res) => {
  try {
    const body = _.pick(req.body, ['email', 'password']);
    const user = await User.findByCredentials(body.email, body.password);
    const token = await user.generateAuthToken();
    req.session['token'] =  'Bearer ' + token;
    req.session['user'] =  user;
    console.log(req.session.token, req.session.user); //Output1
    res.set('Authorization', 'Bearer ' + token);
    res.send(user);
  } catch (err) {
    res.status(401).json({ message: "Incorrect credentials" });
  }
});

/*
Output1 (shortened for readibility)
Bearer eyJhbGciOiJIUzI1NiI.... { 
  _id: 5d5c45c273bad91bfb26fc3d,
  name: 'username',
  slug: 'username',
  email: 'e@mail.com',
  password:
   '$2a$10$SCrA8L...',
  tokens:
   [ { _id: 5d5c467673bad91bfb26fc3f,
       access: 'auth',
       token:
        'eyJhbGciOiJIUzI1NiI.....' } ],
  createdAt: 2019-08-20T19:10:58.770Z,
  updatedAt: 2019-08-20T19:13:58.415Z,
  __v: 2 }
*/
export const actions = {
  async nuxtServerInit ({ commit }, { req }) {
    console.log(req.session) // Output2
    console.log('user: ' + req.session.user, req.session.token) //Output3
    if (req.session.user && req.session.token) {
      commit('auth/SET_USER', req.session.user)
      commit('auth/SET_TOKEN', req.session.token)
    }
  }
}

/* 
Output2 (no user or token included)
Session {
  cookie:
   { path: '/',
     _expires: 2019-09-19T19:10:44.967Z,
     originalMaxAge: 2592000000,
     httpOnly: true,
     secure: false } }

Output3
user: undefined undefined
*/
axios: {
    prefix: '/api',
    credentials: true,
    https: false
  }



如果您想查看任何其他代码片段,请告诉我。

刷新页面创建新会话;
请求会话
将为空。
您必须将令牌和凭据保存在cookie中。你可以用它来做。

或者使用…

刷新页面创建新会话;
请求会话
将为空。
您必须将令牌和凭据保存在cookie中。你可以用它来做。

或者使用…

谢谢您的回复。据我所知,cookie是由
cookie:{httpOnly:true,secure:false,maxAge:1000*60*60*24*30///~1个月},
设置的。感谢您的回复。据我所知,cookie是由
cookie:{httpOnly:true,secure:false,maxAge:1000*60*60*24*30///~1个月},
设置的。