将 req.user 传递给 graphQL

Posted

技术标签:

【中文标题】将 req.user 传递给 graphQL【英文标题】:Passing req.user to graphQL 【发布时间】:2019-05-24 10:25:46 【问题描述】:

我是 GraphQL 新手,对 Node.js 有一些经验。

我在我的应用程序中使用护照登录用户,因此我的req 将在包含用户信息的快递中附加req.user

现在,由于我使用的是 GraphQL,我如何将 req.user 从我的主应用程序传递给 GraphQL? (或者 GraphQL 本身可以访问 req 并因此访问 req.user?)

我有一个像这样的简单 GraphQL Schema

app.use("/graphql", expressGraphQL(
    schema: schema,
    graphiql: true
  ));

对于初学者,我找不到任何使用护照验证用户的教程,所以我考虑使用 restful APi 路由使用护照验证我的用户,然后传递 req.user

【问题讨论】:

【参考方案1】:

您可以将用户资料放入context

app.use("/graphql", expressGraphQL(
    schema: schema,
    graphiql: true,
    context: ( req ) => (
      user: req.user
    )
));

并在解析器中获取上下文。 GraphQL.js 架构中的每个解析器都接受四个位置参数:

fieldName(obj, args, context, info) result

【讨论】:

【参考方案2】:

在节点中使用"graphql": "^14.0.2",我可以像这样使用req 作为解析器参数(app.use 部分中没有任何其他特殊配置):

 fieldName(args, req) 
    console.log(req.user);
 

【讨论】:

以上是关于将 req.user 传递给 graphQL的主要内容,如果未能解决你的问题,请参考以下文章

传递子文档以查看

Express EJS模板如何传递一个json对象来查看它是不是未定义

如何使用把手将 req 参数传递给 js?

express-jwt 将用户对象设置为 req.user._doc 而不仅仅是 req.user?

在 React (ES6) 中访问 Passport 的 req.user? API 调用将 req.user 返回为未定义

jwt刷新后req.user丢失数据