-
Notifications
You must be signed in to change notification settings - Fork 14
/
requireAuth.js
37 lines (31 loc) · 1.08 KB
/
requireAuth.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/* eslint-disable import/no-extraneous-dependencies, no-console */
import { buildSchema, graphql } from 'graphql'
import { addDirectiveResolveFunctionsToSchema } from '../src'
// Create schema with directive declarations
const schema = buildSchema(/* GraphQL */ `
# Require authentication on a specific field
directive @requireAuth on FIELD_DEFINITION
type Query {
allowed: String
unallowed: String @requireAuth
}
`)
// Add directive resolvers to schema
addDirectiveResolveFunctionsToSchema(schema, {
requireAuth(resolve, directiveArgs, obj, context, info) {
if (!context.isAuthenticated)
throw new Error(`You must be authenticated to access "${info.fieldName}"`)
return resolve()
},
})
const query = /* GraphQL */ `
{
allowed
unallowed
}
`
const rootValue = { allowed: 'allowed', unallowed: 'unallowed' }
graphql(schema, query, rootValue, { isAuthenticated: false }).then(response => {
console.log(response.data) // { allowed: 'allowed', unallowed: null }
console.log(response.errors) // [ { Error: You must be authenticated to access "unallowed" } ]
})