阿波罗服务器 2 + Auth0
Apollo Server 2 + Auth0
所以我有一个通过 Auth0 登录并在 cookie 中保存 jwt 令牌的应用程序。
我还有一个用于检索数据的 Apollo Server 2。如果用户已登录并由 Auth0 服务器验证,我如何保护 Apollo 服务器和仅 return 数据?
下面的代码来自 https://www.apollographql.com,但我不明白的是如何处理下面的 getUser(token)
以实际检查授权 header 中的有效 JWT,如果存在,用户将被允许访问受保护的资源?
// 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 是 returns 您的用户使用给定令牌的方法。您可能需要自己编写该方法或使用 OAuth 的 getUser 方法。
获取用户对象后,您将返回它,因此现在您可以访问解析器中的用户对象。在您的解析器方法中,第三个参数是您的上下文对象。您可以在那里访问用户对象。如果你想保护该解析器只允许登录用户使用,你可以在用户为空或未定义时抛出错误。
例如:
export const resolvers = {
Query: {
Me: (parent, args, { user }) => {
if (!user) return Error(`Not Logged In!`)
return user
}
}
}
所以我有一个通过 Auth0 登录并在 cookie 中保存 jwt 令牌的应用程序。
我还有一个用于检索数据的 Apollo Server 2。如果用户已登录并由 Auth0 服务器验证,我如何保护 Apollo 服务器和仅 return 数据?
下面的代码来自 https://www.apollographql.com,但我不明白的是如何处理下面的 getUser(token)
以实际检查授权 header 中的有效 JWT,如果存在,用户将被允许访问受保护的资源?
// 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 是 returns 您的用户使用给定令牌的方法。您可能需要自己编写该方法或使用 OAuth 的 getUser 方法。
获取用户对象后,您将返回它,因此现在您可以访问解析器中的用户对象。在您的解析器方法中,第三个参数是您的上下文对象。您可以在那里访问用户对象。如果你想保护该解析器只允许登录用户使用,你可以在用户为空或未定义时抛出错误。
例如:
export const resolvers = {
Query: {
Me: (parent, args, { user }) => {
if (!user) return Error(`Not Logged In!`)
return user
}
}
}