Express 会话不会通过 Docker 在 Graphql 中保持会话

Posted

技术标签:

【中文标题】Express 会话不会通过 Docker 在 Graphql 中保持会话【英文标题】:Express session does not persist session in Graphql over Docker 【发布时间】:2019-05-18 00:46:30 【问题描述】:

我使用 graphql-yoga 创建我的 graphql api,express-session 配置是这样的:

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,只能通过电子邮件找到用户,我将那个用户的 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 运行它。

【问题讨论】:

【参考方案1】:

如果有人想知道,Twitter 的 Ben Awad 帮助了我,解决方案是在 graphql-playground 中添加request.credentials: include,就是这样:)

【讨论】:

从 Ben Awad 样板中来到这里!

以上是关于Express 会话不会通过 Docker 在 Graphql 中保持会话的主要内容,如果未能解决你的问题,请参考以下文章

快速会话不会注销

Node.js - 会话不会通过 res.redirect() 持续存在

在 CORS 调用后,Express Session 不会持续存在

创建没有 express 的会话

CentOS 7UNIXLinux基于docker安装Oracle 11g express数据库

React 前端 + Express.js 会话