Postgraphile + express + jwt 正在抛出“未找到授权令牌”,即使 graphiql 有效

Posted

技术标签:

【中文标题】Postgraphile + express + jwt 正在抛出“未找到授权令牌”,即使 graphiql 有效【英文标题】:Postgraphile + express + jwt is throwing 'No authorization token found' even though graphiql works 【发布时间】:2019-03-04 04:19:32 【问题描述】:

我正在尝试将 jwt express 中间件和 postgraphile 中间件一起使用,并且我想添加一个例外,以便在 graphiql 界面中使用身份验证令牌。我知道 postgraphile 在 /graphql 上启动 graphql,在 /graphiql 上启动 graphiql,除非另有配置。所以在我的 jwt 中间件初始化中,我正在这样做:

app.use(jwt( secret: process.env.JWT_SECRET).unless(path: ['/', /\/graphiql/i, /\/graphql/i, /auth/i]));

这使得 /graphiql/graphql/auth 路由不需要身份验证令牌。这似乎工作正常,因为我可以很好地进入 graphiql 界面,并且我正在构建的 graphql 查询工作得很好。但是,在我的快递终端中,当我加载 http://localhost:3000/graphiql 时,它仍然试图连接到一个 No authorization token found

对于我还必须添加到 JWT 中间件中的 unless() 方法中的其他内容有什么想法吗?

【问题讨论】:

【参考方案1】:

PostGraphile 当前从 /_postgraphile/* 加载 GraphiQL 资产(JS、CSS),因此您可能希望将这些资产列入白名单。

另一种方法是在添加jwt 中间件之前安装postgraphile - 这样它就不会受到它的影响,并且您不需要维护.unless 列表。

app.use(postgraphile(...));
app.use(jwt(...));
app.use(...);

【讨论】:

以上是关于Postgraphile + express + jwt 正在抛出“未找到授权令牌”,即使 graphiql 有效的主要内容,如果未能解决你的问题,请参考以下文章

AWS 弹性 beantalk 上的 postgraphile 出现 408 超时错误

PostgreSQL / PostGraphile行权限不起作用

PostGraphile deleteEdge 具有多对多关系

当我的 GraphQL 架构在运行时由 postgraphile(在其自己的容器中)自动生成时,如何将中继编译器作为离线构建步骤运行?

中继编译器 12 + graphql 16 = 无效的 AST 节点

GraphQL“必须提供查询字符串” graphql-tag react-apollo