Guest User

Untitled

a guest
Sep 19th, 2018
352
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.32 KB | None | 0 0
  1. import express from 'express'
  2. import { ApolloServer } from 'apollo-server-express'
  3.  
  4. // ...
  5. import passport from 'passport'
  6. import passportJWT from 'passport-jwt'
  7. import jwt from 'jsonwebtoken'
  8. // ...
  9.  
  10. import schema from './schemas'
  11.  
  12. const { GRAPHQL_PORT, JWT_SECRET } = process.env
  13.  
  14. // ...
  15. const users = [
  16. {
  17. id: 1,
  18. name: 'John',
  19. email: 'john@mail.com',
  20. password: 'john123'
  21. }
  22. ]
  23.  
  24. // generate a jwt token for testing purposes
  25. console.log(jwt.sign(users[0], JWT_SECRET))
  26.  
  27. // ...
  28.  
  29. const { Strategy, ExtractJwt } = passportJWT
  30.  
  31. const params = {
  32. secretOrKey: JWT_SECRET,
  33. jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken()
  34. }
  35.  
  36. const strategy = new Strategy(params, (payload, done) => {
  37. const user = users.find(user => user.id === payload.id) || null
  38.  
  39. return done(null, user)
  40. })
  41.  
  42. passport.use(strategy)
  43.  
  44. // ...
  45.  
  46. const app = express()
  47.  
  48. // ...
  49.  
  50. passport.initialize()
  51.  
  52. app.use('/graphql', (req, res, next) => {
  53. passport.authenticate('jwt', { session: false }, (err, user, info) => {
  54. if (user) {
  55. req.user = user
  56. }
  57.  
  58. next()
  59. })(req, res, next)
  60. })
  61.  
  62. // ...
  63.  
  64. const server = new ApolloServer({
  65. schema,
  66. context: ({ req }) => ({
  67. user: req.user
  68. })
  69. })
  70.  
  71. server.applyMiddleware({
  72. app
  73. })
  74.  
  75. app.listen(
  76. {
  77. port: GRAPHQL_PORT
  78. },
  79. () => console.log(`The GraphQL server is running on port ${GRAPHQL_PORT}`)
  80. )
Add Comment
Please, Sign In to add comment