node.js - Apollo 服务器2 + Auth0

标签 node.js graphql auth0 apollo apollo-server

所以我有一个应用程序可以通过 Auth0 登录并在 cookie 中保存 jwt token 。

我还有一个用于检索数据的 Apollo Server 2。如何保护 Apollo 服务器并仅在用户登录并通过 Auth0 服务器验证时才返回数据?

下面的代码来自 https://www.apollographql.com ,但我不明白的是如何处理下面的 getUser(token) 来实际检查授权 header 中是否有有效的 JWT,如果存在,用户将被允许访问 protected 资源?

// using apollo-server 2.x
const { ApolloServer } = require('apollo-server');

const server = new ApolloServer({
 typeDefs,
 resolvers,
 context: ({ req }) => {
   // get the user token from the headers
   const token = req.headers.authorization || '';

   // try to retrieve a user with the token
   const user = getUser(token);

   // add the user to the context
   return { user };
 },
});

server.listen().then(({ url }) => {
 console.log(`🚀 Server ready at ${url}`)
});

最佳答案

getUser 是返回带有给定 token 的用户的方法。您可能需要自己编写该方法或使用 OAuth 的 getUser 方法。

获取用户对象后,您将返回它,因此现在您可以在解析器中访问用户对象。在解析器方法中,第三个参数是上下文对象。您可以在那里访问用户对象。如果您想保护该解析器仅由登录用户允许,则如果 user 为 null 或未定义,则可以抛出错误。

例如:

export const resolvers = {
Query: {
  Me: (parent, args, { user }) => {
    if (!user) return Error(`Not Logged In!`)
    return user
  }
 }
}

关于node.js - Apollo 服务器2 + Auth0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52141804/

相关文章:

node.js Q Promise 然后是 Promise 链

javascript - Bootstrap 对齐

node.js - 如何部署 Angular.js 应用程序?

angularjs - Auth0 和 Angular 错误 - 无法初始化 Auth0Angular。 Auth0Lock 或 Auth0 必须可用

oauth - Auth0/授权端点不返回 JWT

node.js - 大量的node_modules使我的mac inode耗尽

node.js - Node 监视器错误 : "System limit for number of file watchers reached"

reactjs - Relay QueryRenderer 不从查询返回预期的 props

reactjs - formik 在onSubmit 处理程序中访问initialValues 以与值进行比较

java - 决定在 Java 中使用 com.auth0 或 io.jsonwebtoken 作为 JWT