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个月},
设置的。