Express 会话不会在 Graphql 中持续会话 Docker
Express session does not persist session in Graphql over Docker
我使用 graphql-yoga 创建我的 graphql api,快速会话配置是这样的:
session({
store: new RedisStore({
client: redis as any,
prefix: redisSessionPrefix
}),
name: "qid",
secret: process.env.SESSION_SECRET as string,
resave: false,
saveUninitialized: false,
cookie: {
httpOnly: true,
secure: process.env.NODE_ENV === "production", // Only works with https
maxAge: 1000 * 60 * 60 * 24 * 7 // 7 days
}
})
完整代码here.
然后,如果有任何用户要登录,会话将这样保存:
session.userId = user.id;
user.id
来自一个叫做TypeORM的ORM,只能通过email找到一个用户,我把那个用户的id放在session.userId
中。完整代码 here.
然后,如果我想检查用户是否登录,我使用查询:
User.findOne({ where: { id: session.userId } })
之前的代码只执行 TypeORM 中名为 User 的实体,它只查找拥有 session.userId
的用户。但是 session.userId
是未定义的...完整代码 here
有人知道为什么吗?
这些是我用于开发的 docker 配置。
Dockerfile.dev
Docker-compose.dev.yml
如果有人需要 100% 完整的代码,here 您可以找到它,您可以在服务器文件夹中 运行 使用 docker-compose -f docker-compose.dev.yml up --build
找到它。
如果有人想知道,来自 Twitter 的 Ben Awad 帮助了我,解决方案是添加到 graphql-playground request.credentials: include
,仅此而已:)
我使用 graphql-yoga 创建我的 graphql api,快速会话配置是这样的:
session({
store: new RedisStore({
client: redis as any,
prefix: redisSessionPrefix
}),
name: "qid",
secret: process.env.SESSION_SECRET as string,
resave: false,
saveUninitialized: false,
cookie: {
httpOnly: true,
secure: process.env.NODE_ENV === "production", // Only works with https
maxAge: 1000 * 60 * 60 * 24 * 7 // 7 days
}
})
完整代码here.
然后,如果有任何用户要登录,会话将这样保存:
session.userId = user.id;
user.id
来自一个叫做TypeORM的ORM,只能通过email找到一个用户,我把那个用户的id放在session.userId
中。完整代码 here.
然后,如果我想检查用户是否登录,我使用查询:
User.findOne({ where: { id: session.userId } })
之前的代码只执行 TypeORM 中名为 User 的实体,它只查找拥有 session.userId
的用户。但是 session.userId
是未定义的...完整代码 here
有人知道为什么吗?
这些是我用于开发的 docker 配置。
Dockerfile.dev Docker-compose.dev.yml
如果有人需要 100% 完整的代码,here 您可以找到它,您可以在服务器文件夹中 运行 使用 docker-compose -f docker-compose.dev.yml up --build
找到它。
如果有人想知道,来自 Twitter 的 Ben Awad 帮助了我,解决方案是添加到 graphql-playground request.credentials: include
,仅此而已:)