大家好,我对快速会话有疑问。我已经使用 express-session 创建了会话,并在我的 apollo-server-express 中使用了它,但是在我的登录突变中,当我想使用会话来存储我的用户 ID 并再次在我的查询中使用该会话时,它将更改为未定义. 问题是什么?
这是我使用 mongo-connect 创建会话的 index.js:
const MongoStore = mongoconnect(session);
const SERVER = new ApolloServer({
typeDefs,
resolvers,
cors: {
origin: '*',
credentials: true
},
playground: {
endpoint: `http://localhost:3600/graphql`,
settings: {
'editor.theme': 'dark'
}
},
context: ({ req }) => {
return {
req,
session: req.session
}
}
});
app.use(
session({
store: new MongoStore({
mongooseConnection: mongoose.connection
}),
secret: "mysecret-ssss",
resave: false,
saveUninitialized: false,
cookie: {
maxAge: 1000 * 60 * 60 * 2,
sameSite: true,
secure: true
}
})
);
这是我的查询:
Query: {
circularLetters: async (parent, args, context, info) => {
const options = {
page: args.page,
limit: args.limit
};
const circularLetter = await CircularLetters.paginate({}, options, (err, result) => {
return result.docs;
});
console.log(context.session.userId)
return circularLetter;
},
}
还有我想在会话中存储我的用户 ID 的突变:
Mutation: {
login: async (parent, args, context, info) => {
const user = await Users.findOne({
personelNumber: args.data.personelNumber
}, function (err, myUser) {
console.log(err);
});
if (!user) {
throw new Error("User not found");
}
const isMatch = await bcrypt.compare(args.data.password, user.password);
if (!isMatch) {
throw new Error("Wrong password");
}
context.session.userId = user.id;
console.log(context.session);
return {
user,
token: generateToken(user.id)
}
},
}