Skip to content

Latest commit

 

History

History
66 lines (52 loc) · 2.31 KB

File metadata and controls

66 lines (52 loc) · 2.31 KB

@jcm/nexus-plugin-relay-node-interface

Patreon Logo
Discord Logo

This plugin allows to set a authentication property on any field, and it will validate that the user is / is not authenticated before resolving it.

Sample usage:

const User = objectType({
  name: 'User',
  definition(t) {
    // ..

    t.string('email', {
      // this field will only be resolved if the user is authenticated
      authentication: true,
    })

    t.string('email', {
      // this field will only be resolved if the user is NOT authenticated
      authentication: false,
    })

    t.string('email', {
      // this field will only be resolved if the user is authenticated
      //  when they are not, '[email protected]' will be returned instead
      authentication: [true, '[email protected]'],
    })

    t.string('email', {
      // this field will only be resolved if the user is authenticated
      //  when they are not, an error will be thrown
      authentication: [true, new Error('Something happened!')],
    })

    // you can also pass a resolve like function, their result must be like the value above
    //  or it can also throw an error
    t.string('email', {
      // this field will only be resolved if the user is authenticated
      //  when they are not, an error will be thrown
      authentication: async (root, args, ctx, info) => [false],
    })
  },
})

The plugin accepts a few options, but the main one is isLogged, which is a resolve like function that you can provide to assert that the client is logged or not. By default it's set to:

(_root, _args, ctx, _info) => !!ctx?.state?.user

Which will work if you are storing the logged user on ctx.state.user. Otherwise you can change it to your own logic.

It's so confusing allowing false in the authentication field!

I agree, in reality I have never had the need to use something other than true | Error