如何将身份验证中间件应用于graphql端点?

时间:2018-08-12 19:21:09

标签: javascript node.js authentication jwt graphql

我在节点应用程序中有一个graphql端点,我想将其包装在身份验证中间件中以验证和提取JWT。但是,希望某些查询/变体(即注册和登录)是公开的,而其余的则要受到保护。

我有一台简单的服务器,混合了expressapolloServer

const app = express();

const server = new ApolloServer({ typeDefs, resolvers });
server.applyMiddleware({ app });

const PORT = process.env.PORT || 3042;
app.listen(PORT, () => console.log(`Listening on ${PORT}`) )

export default app

我当时想我应该使用通行证来制定一种策略,以提取并验证JWT和用户并将authMiddleware应用于apolloServer或/graphql端点。

passport.use(new JWTStrategy({
    jwtFromRequest: ExtractJWT.fromAuthHeaderAsBearerToken(),
    secretOrKey   : JWT_SECRET
  },
  (jwtPayload, cb) => {
    return UserModel.findOne({email: jwtPayload.email})
      .then(user => {
        return cb(null, user);
      })
      .catch(err => {
        return cb(err);
      });
  }
));

const authMiddleware = passport.authenticate('jwt', { session: false })

这适用于rest API,您可以在其中将中间件应用于所需的路由,但我只希望它在某些突变/查询上运行。

如何在graphql API中处理验证/提取JWT?

0 个答案:

没有答案