簡體   English   中英

Node.js-req.session不持久

[英]Nodejs - req.session does not persist

我正在嘗試使用expressnuxtjsexpress-session實現登錄功能。 只要我不刷新頁面,一切都會按預期進行。
頁面重新加載后,會話中沒有保存任何內容。 我使用MongoStore將會話保存在mongodb集合中,效果很好。

DEBUG = express-session返回: express-session no SID sent


服務器/ 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) 

服務器/api/users.js

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

商店/index.js

 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 */ 

nuxt.config.js

 axios: { prefix: '/api', credentials: true, https: false } 



如果您想查看其他任何代碼段,請告訴我。

刷新頁面創建一個新的會話; req.session將為空。
您必須將令牌和憑據保存在Cookie中。 您可以使用cookie-universal-nuxt做到這一點
或使用nuxt-auth ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM