【发布时间】:2019-12-26 01:35:32
【问题描述】:
我正在尝试使用express、nuxtjs 和express-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 }
*/
store/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
}
如果您想查看任何其他代码 sn-p,请告诉我。
【问题讨论】:
标签: node.js express session-cookies nuxt.js express-session