【发布时间】:2021-12-04 02:40:43
【问题描述】:
我正在尝试使用 GraphQL 和 Express 创建登录系统,但会话未保存。每当我登录时,req.session.userId 都保持未定义状态。
我的代码:
(async () => {
await connect(process.env.MONGO_URI!, { dbName: "example" });
const app = express();
app.use(
cors({
origin: [__clientUrl__, "https://studio.apollographql.com"],
credentials: true
})
);
app.use(
session({
name: "qid",
secret: process.env.SESSION_SECRET!,
store: MongoStore.create({
mongoUrl: process.env.MONGO_URI,
dbName: "example"
}),
saveUninitialized: false,
resave: false,
cookie: {
maxAge: 6.048e8,
httpOnly: __prod__,
sameSite: "lax",
secure: __prod__
}
})
);
const server = new ApolloServer({
schema: await buildSchema({
resolvers: [HelloResolver, UserResolver],
validate: false
}),
context: ({ req, res }) => ({ req, res })
});
await server.start();
server.applyMiddleware({
app,
cors: {
origin: [__clientUrl__, "https://studio.apollographql.com"],
credentials: true
}
});
app.listen(__port__, () =>
console.log(
`???? Server started at http://localhost:${__port__}${server.graphqlPath}`
)
);
})();
TypeGraphQL 登录突变:
@Mutation(() => User, { nullable: true })
public async login(
@Arg("username") username: string,
@Arg("password") password: string,
@Ctx() { req }: Context
) {
const user = await UserModel.findOne(
username.includes("@") ? { email: username } : { username }
);
if (!user) return;
if (!(await verify(user.password, password))) return;
req.session.userId = user._id;
return user;
}
【问题讨论】:
标签: typescript express session graphql express-graphql