File tree Expand file tree Collapse file tree 2 files changed +52
-0
lines changed Expand file tree Collapse file tree 2 files changed +52
-0
lines changed Original file line number Diff line number Diff line change 1
1
import { ApolloServer , gql } from 'apollo-server'
2
+ import { getAuthIdFromJWT } from './util/auth'
2
3
3
4
const reviews = [
4
5
{
@@ -10,9 +11,14 @@ const reviews = [
10
11
const server = new ApolloServer ( {
11
12
typeDefs : gql `
12
13
type Query {
14
+ me: User
13
15
hello: String!
14
16
reviews: [Review!]!
15
17
}
18
+ type User {
19
+ firstName: String
20
+ lastName: String
21
+ }
16
22
type Review {
17
23
text: String!
18
24
stars: Int
@@ -28,6 +34,7 @@ const server = new ApolloServer({
28
34
` ,
29
35
resolvers : {
30
36
Query : {
37
+ me : ( _ , __ , context ) => context . user ,
31
38
hello : ( ) => '🌍🌏🌎' ,
32
39
reviews : ( ) => reviews
33
40
} ,
@@ -43,6 +50,20 @@ const server = new ApolloServer({
43
50
return review
44
51
}
45
52
}
53
+ } ,
54
+ context : async ( { req } ) => {
55
+ const context = { }
56
+
57
+ const jwt = req . headers . authorization
58
+ const authId = await getAuthIdFromJWT ( jwt )
59
+ if ( authId === 'github|1615' ) {
60
+ context . user = {
61
+ firstName : 'John' ,
62
+ lastName : 'Resig'
63
+ }
64
+ }
65
+
66
+ return context
46
67
}
47
68
} )
48
69
Original file line number Diff line number Diff line change
1
+ import jwt from 'jsonwebtoken'
2
+ import jwks from 'jwks-rsa'
3
+ import { promisify } from 'util'
4
+
5
+ const verify = promisify ( jwt . verify )
6
+
7
+ const jwksClient = jwks ( {
8
+ cache : true ,
9
+ rateLimit : true ,
10
+ jwksUri : 'https://graphql.auth0.com/.well-known/jwks.json'
11
+ } )
12
+
13
+ const getPublicKey = ( header , callback ) => {
14
+ jwksClient . getSigningKey ( header . kid , ( e , key ) => {
15
+ callback ( e , key . publicKey || key . rsaPublicKey )
16
+ } )
17
+ }
18
+
19
+ export const getAuthIdFromJWT = async token => {
20
+ if ( ! token ) {
21
+ return
22
+ }
23
+
24
+ const verifiedToken = await verify ( token , getPublicKey , {
25
+ algorithms : [ 'RS256' ] ,
26
+ audience : 'https://api.graphql.guide' ,
27
+ issuer : 'https://graphql.auth0.com/'
28
+ } )
29
+
30
+ return verifiedToken . sub
31
+ }
You can’t perform that action at this time.
0 commit comments